1. Осмислене створення таблиць

У попередніх лекціях ми вже трохи познайомилися із запитами для створення таблиць, тож тепер настав час розібратися в цьому глибше.

Створення таблиці дуже нагадує оголошення класу Java і має такий шаблон:

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

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

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

Виглядає дуже просто, тому що тут не вказано купи нюансів.

По-перше, таблиця може мати додаткові налаштування.

А по-друге, кожна колонка може мати додаткові налаштування.

І почнемо ми з налаштувань для створення колонок.

2. Ключі в таблиці

У колонки таблиці крім імені та типу даних можуть бути ще такі налаштування:

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,
);

3. Налаштування типу даних

Є менш важливі, але корисні атрибути.

DEFAULT 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,
);