В SQLite можете да създадете CHECK ограничение чрез добавяне на приложимия код в CREATE TABLE изявление при създаване на таблицата.
Ако таблица има CHECK ограничение върху него и се опитвате да вмъкнете или актуализирате данни, които нарушават CHECK ограничение, операцията ще се провали с грешка.
Ограничение CHECK на ниво колона
Ето пример за създаване на CHECK на ниво колона ограничение.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Частта, която отива CHECK (Price > 0) е CHECK ограничение.
В този случай той посочва, че цената трябва да е по-голяма от нула.
Сега нека видим какво се случва, ако се опитаме да вмъкнем данни, които нарушават това ограничение.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00); Резултат:
Error: CHECK constraint failed: Products
CHECK ограничението работи според очакванията.
Получавам същия резултат, ако се опитам да използвам отрицателна стойност.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00); Резултат:
Error: CHECK constraint failed: Products
Но ако го увелича до стойност, по-голяма от нула, тогава INSERT операцията е успешна.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products; Резултат:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Ограничение CHECK на ниво таблица
CHECK на ниво таблица constraint проверява данни в целия ред, а не само в една колона. С други думи, можете да използвате ограничение на ниво таблица, за да проверите данни от множество колони.
Ето пример за CHECK на ниво таблица ограничение.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
); Тази таблица е подобна на първата, с изключение на това, че добавих допълнителна колона, наречена Отстъпка .
За CHECK ограничение, сега проверявам дали цената е по-голяма от отстъпката (не искаме възможността да имаме отстъпка, която е по-голяма от действителната цена).
Ето какво се случва, ако се опитам да вмъкна отстъпка, която е по-голяма от цената.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00); Резултат:
Error: CHECK constraint failed: Products
Ако коригирам отстъпката така, че да е по-ниска от цената, тя е въведена успешно.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products; Резултат:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5