V SQLite můžete vytvořit CHECK
omezení přidáním příslušného kódu do CREATE TABLE
při vytváření tabulky.
Pokud tabulka obsahuje CHECK
omezení a pokusíte se vložit nebo aktualizovat data, která porušují CHECK
omezení, operace selže s chybou.
Omezení KONTROLY na úrovni sloupců
Zde je příklad vytvoření CHECK
na úrovni sloupce omezení.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Část, která jde CHECK (Price > 0)
je CHECK
omezení.
V tomto případě určuje, že cena musí být větší než nula.
Nyní se podívejme, co se stane, když se pokusíme vložit data, která toto omezení porušují.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Výsledek:
Error: CHECK constraint failed: Products
CHECK
omezení fungovalo podle očekávání.
Dostanu stejný výsledek, když se pokusím použít zápornou hodnotu.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
Výsledek:
Error: CHECK constraint failed: Products
Ale pokud ji zvýším na hodnotu, která je větší než nula, pak INSERT
operace úspěšná.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
Výsledek:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Omezení KONTROLY na úrovni tabulky
CHECK
na úrovni tabulky omezení kontroluje data v celém řádku, nikoli pouze v jednom sloupci. Jinými slovy, můžete použít omezení na úrovni tabulky ke kontrole dat z více sloupců.
Zde je příklad CHECK
na úrovni tabulky omezení.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
Tato tabulka je podobná první, až na to, že jsem přidal další sloupec s názvem Sleva .
Pro CHECK
omezení, nyní kontrolujem, zda je cena vyšší než sleva (nechceme mít možnost mít slevu, která je větší než skutečná cena).
Co se stane, když se pokusím vložit slevu, která je větší než cena.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
Výsledek:
Error: CHECK constraint failed: Products
Pokud slevu upravím tak, aby byla nižší než cena, vloží se úspěšně.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products;
Výsledek:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5