У SQL ми можемо застосувати правила до стовпця, відомі як обмеження. Ці правила стосуються даних, які можуть зберігатися в стовпці. Наприклад, якщо стовпець має обмеження NOT NULL, то він не зможе зберігати значення NULL.
У SQL використовуються наступні обмеження:
| Обмеження | Опис |
| NOT NULL | Значення не можуть бути NULL. |
| UNIQUE | Значення повинні бути унікальними і не можуть співпадати з уже існуючими. |
| PRIMARY KEY | Використовується для унікальної ідентифікації рядка. |
| FOREIGN KEY | Посилається на рядок в іншій таблиці. |
| CHECK | Перевіряє умову для вставки нового значення. |
| DEFAULT | Встановлює значення за замовчуванням, якщо воно не передано. |
| CREATE INDEX | Використовується для прискорення пошуку/читання даних. |
Примітка: Ці обмеження називаються обмеженнями цілісності даних.
Обмеження NOT NULL
Обмеження NOT NULL означає, що стовпець не може зберігати значення NULL. Наприклад:
|
1 2 3 4 5 |
CREATE TABLE Colleges ( college_id INT NOT NULL, college_code VARCHAR(20) NOT NULL, college_name VARCHAR(50) ); |
Тут стовпці college_id та college_code таблиці Colleges не можуть містити значення NULL.
Обмеження UNIQUE
Обмеження UNIQUE означає, що стовпець повинен мати унікальне значення. Наприклад:
|
1 2 3 4 5 |
CREATE TABLE Colleges ( college_id INT NOT NULL UNIQUE, college_code VARCHAR(20) UNIQUE, college_name VARCHAR(50) ); |
Тут значення стовпця college_code повинно бути унікальним. Так само значення college_id повинно бути унікальним, до того ж ще й без значень NULL.
Обмеження PRIMARY KEY
Обмеження PRIMARY KEY — це просто комбінація обмежень NOT NULL та UNIQUE. Це означає, що значення стовпця використовується для унікальної ідентифікації рядка. Наприклад:
|
1 2 3 4 5 |
CREATE TABLE Colleges ( college_id INT PRIMARY KEY, college_code VARCHAR(20) NOT NULL, college_name VARCHAR(50) ); |
Тут значення стовпця college_id є унікальним ідентифікатором рядка. До того ж він не може зберігати значення NULL і повинен бути унікальним (UNIQUE).
Обмеження FOREIGN KEY
Обмеження FOREIGN KEY (в деяких СУБД обмеження REFERENCES) у стовпці використовується для посилання на дані з іншої таблиці. Наприклад:
|
1 2 3 4 |
CREATE TABLE Orders ( order_id INT PRIMARY KEY, customer_id int REFERENCES Customers(id) ); |
Тут значенням customer_id в таблиці Orders повинно бути значення зі стовпця id таблиці Customers.
Обмеження CHECK
Обмеження CHECK перевіряє умову, перш ніж дозволити помістити значення в стовпець. Наприклад:
|
1 2 3 4 |
CREATE TABLE Orders ( order_id INT PRIMARY KEY, amount int CHECK (amount >= 100) ); |
Тут значення стовпця amount повинно бути більше або рівним 100. В протилежному випадку SQL видасть помилку.
Обмеження DEFAULT
Обмеження DEFAULT використовується для встановлення значення за замовчуванням, якщо ми намагаємося помістити NULL у стовпець. Наприклад:
|
1 2 3 4 5 |
CREATE TABLE College ( college_id INT PRIMARY KEY, college_code VARCHAR(20), college_country VARCHAR(20) DEFAULT 'Japan' ); |
Тут значенням для стовпця college_country є Japan. Якщо ми спробуємо помістити значення NULL в стовпець college_country, то значенням все одно буде Japan.
Обмеження CREATE INDEX
Якщо стовпець має обмеження CREATE INDEX, то витягування даних відбудеться швидше, якщо ми будемо використовувати саме цей стовпець для отримання даних. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 |
-- Создаем таблицу CREATE TABLE Colleges ( college_id INT PRIMARY KEY, college_code VARCHAR(20) NOT NULL, college_name VARCHAR(50) ); -- Добавляем ограничение CREATE INDEX college_index ON Colleges(college_code); |
Тут ми створюємо індекс з ім’ям college_index у таблиці Colleges, використовуючи стовпець college_code.
Примітка: Індекс — це об’єкт бази даних, створений для покращення продуктивності пошуку даних. Таблиці в базі даних можуть мати велику кількість рядків, які зберігаються в довільному порядку, і їх пошук за вказаним критерієм шляхом послідовного перегляду таблиці рядок за рядком може займати багато часу. Як закладка в книзі, індекс допомагає швидко отримати доступ до необхідних даних у таблиці, згідно SQL-запиту. Таким чином, використання індексів дозволяє прискорити отримання даних.
Примітка: Побачити різницю у швидкості при малій кількості даних у таблиці проблематично. Однак при великій кількості даних можна легко помітити різницю в швидкості між використанням індексів і без них.
