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