В 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