Ограничение 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; |