Осмысленное создание таблиц
В предыдущих лекциях мы уже немного познакомились с запросами для создания таблиц, теперь настало время разобраться в этом поглубже.
Создание таблицы очень напоминает объявление класса в 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,
);
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ