CHECK в Oracle SQL — как задать ограничения для валидации данных в таблицах

🟢CHECK в Oracle SQL. Введение

CHECK позволяет задать логическое условие, которому должны соответствовать значения в столбцах таблицы. Это способ внедрить бизнес-правила прямо в структуру базы данных, предотвращая запись некорректных данных.


🔤 Написание

sql
CREATE TABLE employees (
id NUMBER,
salary NUMBER,
CHECK (salary > 0)
);

Или при добавлении ограничения отдельно:

sql
ALTER TABLE employees
ADD CONSTRAINT chk_salary CHECK (salary > 0);

🔄 Где часто используется

  • При создании таблиц с ограничениями

  • При защите от некорректных значений

  • При автоматической валидации бизнес-логики

  • Вместе с INSERT и UPDATE операциями

  • При построении форм и API, где важно доверие к БД


🧪 10 Примеров использования CHECK с пояснениями

1️⃣ Проверка на положительное значение

sql
CREATE TABLE accounts (
id NUMBER,
balance NUMBER CHECK (balance >= 0)
);

Нельзя вставить отрицательный баланс.


2️⃣ Ограничение на диапазон значений

sql
CREATE TABLE ratings (
id NUMBER,
score NUMBER CHECK (score BETWEEN 1 AND 5)
);

Оценка должна быть от 1 до 5.


3️⃣ Ограничение на перечисление значений

sql
CREATE TABLE orders (
id NUMBER,
status VARCHAR2(20) CHECK (status IN ('NEW', 'IN_PROGRESS', 'DONE'))
);

Статус только из заданного списка.


4️⃣ Добавление CHECK к уже существующей таблице

sql
ALTER TABLE employees
ADD CONSTRAINT chk_age CHECK (age BETWEEN 18 AND 65);

Добавляем ограничение на возраст.


5️⃣ Именование ограничения

sql
CREATE TABLE products (
id NUMBER,
price NUMBER,
CONSTRAINT chk_price CHECK (price > 0)
);

Понятное имя помогает в отладке.


6️⃣ CHECK с несколькими условиями

sql
CREATE TABLE books (
id NUMBER,
price NUMBER,
discount NUMBER,
CHECK (discount < price AND price > 0)
);

Сложная бизнес-логика внутри ограничения.


7️⃣ Проверка текстового поля

sql
CREATE TABLE users (
id NUMBER,
gender CHAR(1) CHECK (gender IN ('M', 'F'))
);

Только ‘M’ или ‘F’ допустимы.


8️⃣ Удаление CHECK ограничения

sql
ALTER TABLE employees
DROP CONSTRAINT chk_age;

Удаляем ограничение, если оно больше не нужно.


9️⃣ Попытка вставить неправильное значение

sql
INSERT INTO ratings (id, score) VALUES (1, 6);
-- ORA-02290: check constraint violated

Oracle не даст вставить недопустимое значение.


🔟 CHECK с NULL — поведение особенное

sql
CHECK (salary > 0)
-- Не проверяется, если значение NULL

NULL не вызывает ошибку — ограничение пропускается.


🧩 Заключение

Оператор CHECK помогает внедрять правила качества данных прямо в схему базы данных, делая её самодостаточной и защищённой от ошибок на уровне приложения.

💡 Запомни:

  • Проверяет логические условия для значений

  • Используется при CREATE TABLE и ALTER TABLE

  • Можно задать имя ограничения

  • Работает на уровне строки

  • NULL значения не нарушают ограничения, если не указано иное


🔜 Следующая статья:

WITH в Oracle SQL — как писать читаемые подзапросы и создавать CTE для сложных выборок


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии