Обмеження CHECK використовується для вказування умови, яка має бути виконана для вставки значення в таблицю. Наприклад:
|
1 2 3 4 |
CREATE TABLE Orders ( order_id INT PRIMARY KEY, amount INT CHECK (amount > 0) ); |
Тут стовпець amount приймає значення лише більше 0, це є умовою для перевірки. Тепер давайте спробуємо вставити дані в таблицю Orders.
Приклад №1
|
1 2 3 |
-- Вставляємо значення 100. -- Дані додані INSERT INTO Orders(amount) VALUES(100); |
Приклад №2
|
1 2 3 |
-- Вставляємо значення -5. -- Помилка при додаванні даних INSERT INTO Orders(amount) VALUES(-5); |
Примітка: Обмеження CHECK використовується для перевірки даних лише при вставці. Щоб перевірити, чи існує рядок, слід використовувати оператор EXISTS.
Створити іменоване обмеження CHECK
Популярною практикою є створення іменованих обмежень, щоб їх було легше змінювати та видаляти. Наприклад:
|
1 2 3 4 5 6 7 |
-- Створюємо іменоване обмеження amountCK для стовпця amount. -- Обмеження перевіряє, щоб значення для вставки було більшим 0 CREATE TABLE Orders ( order_id INT PRIMARY KEY, amount INT, CONSTRAINT amountCK CHECK (amount > 0) ); |
Обмеження CHECK у існуючій таблиці
Ми можемо додати обмеження CHECK до існуючої таблиці за допомогою оператора ALTER TABLE. Наприклад:
|
1 2 3 4 |
-- Додаємо неіменоване обмеження CHECK ALTER TABLE Orders ADD CHECK (amount > 0); |
Також можна додати іменоване обмеження CHECK:
|
1 2 3 4 |
-- Додаємо іменоване обмеження CHECK - amountCK ALTER TABLE Orders ADD CONSTRAINT amountCK CHECK (amount > 0); |
Примітка: Якщо ми спробуємо додати обмеження amount > 0 до стовпця, значення якого вже менше 0, ми отримаємо помилку.
Видалити обмеження CHECK
Ми можемо видалити обмеження CHECK, використовуючи оператор DROP. Наприклад:
SQL Server, PostgreSQL, Oracle
|
1 2 3 |
-- Видаляємо обмеження CHECK - amountCK ALTER TABLE Orders DROP CONSTRAINT amountCK; |
MySQL
|
1 2 3 |
-- Видаляємо обмеження CHECK - amountCK ALTER TABLE Orders DROP CHECK amountCK; |
