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