Осмысленное создание таблиц

В предыдущих лекциях мы уже немного познакомились с запросами для создания таблиц, теперь настало время разобраться в этом поглубже.

Создание таблицы очень напоминает объявление класса в Java и имеет такой шаблон:

CREATE TABLE table_name (
	column1 datatype,
	column2 datatype,
	column3 datatype,
   ....
);

Давай для примера напишем запрос, который создает таблицу с пользователями:

CREATE TABLE user (
	id INT,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

Выглядит очень просто, потому что тут не указано куча нюансов.

Во-первых, у таблицы могут быть дополнительные настройки.

А во-вторых, у каждой колонки могут быть дополнительные настройки.

И начнем мы с настроек создания колонок.

Ключи в таблице

У колонки таблицы кроме имени и типа данных могут быть еще такие настройки:

PRIMARY KEY Колонка является ключом таблицы
UNIQUE KEY Все значения колонки должны быть уникальны
DEFAULT value Значение по умолчанию
NOT NULL Запрет принимать значение NULL
AUTO_INCREMENT SQL-сервер будет автоматически увеличивать значение при добавлении новой записи в таблицу
GENERATED Вычисляемое поле
STORAGE Где хранить данные: на диске или в памяти
COMMENT Комментарий к колонке, например, название на локальном языке

Ниже мы рассмотрим некоторые из них.

Во-первых, это PRIMARY KEY.

Чаще всего это отдельная колонка с именем id и типом INT. Это так называемый “главный ключ” таблицы, и все ее строки имеют уникальные значения этого ключа. В первую очередь он используется для того, чтобы другие таблицы могли ссылаться на записи нашей таблицы и указывать на ее определенную запись.

Во-вторых, это UNIQUE KEY.

Чем-то он похож на PRIMARY KEY, хотя смысловая нагрузка у него абсолютно другая. Если колонка имеет атрибут UNIQUE, то все значения этой колонки должны быть уникальны. Хороший пример отличия UNIQUE KEY и PRIMARY KEY – это список людей в паспортном столе.

Налоговый номер – это PRIMARY KEY, он используется для того, чтобы легко было ссылаться на нужного человека из других таблиц.

Номер паспорта – это UNIQUE KEY. Не может быт двух людей с одинаковым номером паспорта. Однако номер паспорта можно поменять. Например, при смене фамилии. А налоговый номер останется с вами навсегда. Это и есть основная задача PRIMARY KEY. Пример запроса с указанием PRIMARY KEY:

CREATE TABLE user (
	id INT PRIMARY KEY,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

Настройки типа данных

Есть менее важные, но полезные атрибуты.

DEFAUL value

При вставке данных (добавлении новой строки) в таблицу можно не указывать значения некоторых колонок, если те имеют значение по умолчанию. В таком случае SQL-сервер просто установит значение колонки сам.

Начиная с 8-й версии MySQL в качестве значения можно указывать выражение.

NOT NULL

Если при создании таблицы у колонки указать атрибут NOT NULL, то SQL-сервер будет следить за тем, чтобы в эту колонку нельзя было сохранить значение NULL. По умолчанию у любой колонки может быть значение NULL, даже у колонки с типом INT. Что немного неочевидно для Java-программиста.

AUTO_INCREMENT

Обычно он используется для id колонок. Когда ты добавляешь новую строку в таблицу, то очень хочется, чтобы SQL-сервер сам присвоил id для этой записи. Кто как не сервер лучше всего знает, сколько у него строк в таблице. Особенно если к одному SQL-серверу идут запросы с разных клиентов.

Именно это и делает атрибут AUTO_INCREMENT. При добавлении новой строки мы просто не передаем ничего в качестве id, и SQL-сервер сам укажет нужный ID для этой записи: он просто возьмет ID последней существующей записи и увеличит его на 1. Этот атрибут можно использовать только с типами целых и вещественных чисел. И, конечно же, давай сделаем пример создания такой таблицы:

CREATE TABLE user (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL,
	level INT DEFAULT 1,
	created_date DATE NOT NULL,
);
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 1 лекция
Недоступна
task0604
В данной задаче тебе потребуется: 1. Создать таблицу с названием users. 2. Добавить обязательную колонку user_id с типом INT, без ограничения и с auto increment. 3. Добавить обязательную колонку first_name с типом VARCHAR и ограничением на 255 символов. 4. Добавить обязательную колонку last_name с т
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 1 лекция
Недоступна
task0605
В данной задаче тебе потребуется: 1. Создать таблицу с названием users. 2. Добавить обязательную колонку user_id с типом INT, без ограничения и с auto increment. 3. Добавить обязательную колонку first_name с типом VARCHAR и ограничением на 255 символов. 4. Добавить обязательную колонку last_name с т