W SQLite możesz utworzyć CHECK ograniczenie przez dodanie odpowiedniego kodu w CREATE TABLE oświadczenie podczas tworzenia tabeli.
Jeśli tabela ma CHECK ograniczenie i próbujesz wstawić lub zaktualizować dane, które naruszają CHECK ograniczenie, operacja zakończy się niepowodzeniem z błędem.
Ograniczenie sprawdzania na poziomie kolumny
Oto przykład tworzenia kolumny CHECK na poziomie kolumny ograniczenie.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Część, która idzie CHECK (Price > 0) to CHECK ograniczenie.
W tym przypadku określa, że cena musi być większa od zera.
Zobaczmy teraz, co się stanie, jeśli spróbujemy wstawić dane, które naruszają to ograniczenie.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00); Wynik:
Error: CHECK constraint failed: Products
CHECK ograniczenie działało zgodnie z oczekiwaniami.
Otrzymuję ten sam wynik, jeśli próbuję użyć wartości ujemnej.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00); Wynik:
Error: CHECK constraint failed: Products
Ale jeśli zwiększę go do wartości większej od zera, wtedy INSERT operacja się powiodła.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products; Wynik:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Ograniczenie kontrolne na poziomie tabeli
CHECK na poziomie tabeli ograniczenie sprawdza dane w całym wierszu, a nie tylko w pojedynczej kolumnie. Innymi słowy, możesz użyć ograniczenia na poziomie tabeli, aby sprawdzić dane z wielu kolumn.
Oto przykład CHECK na poziomie tabeli ograniczenie.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
); Ta tabela jest podobna do pierwszej, z tą różnicą, że dodałem dodatkową kolumnę o nazwie Rabat .
Dla CHECK ograniczenia, teraz sprawdzam, czy cena jest większa niż rabat (nie chcemy, aby rabat był większy niż cena rzeczywista).
Oto, co się stanie, jeśli spróbuję wstawić zniżkę większą niż cena.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00); Wynik:
Error: CHECK constraint failed: Products
Jeśli dostosuję rabat tak, aby był niższy niż cena, zostanie on wstawiony pomyślnie.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products; Wynik:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5