I SQLite kan du oprette en CHECK
begrænsning ved at tilføje den relevante kode i CREATE TABLE
sætning ved oprettelse af tabellen.
Hvis en tabel har en CHECK
begrænsning på det, og du forsøger at indsætte eller opdatere data, der overtræder CHECK
begrænsning, vil operationen mislykkes med en fejl.
Kontrolbegrænsning på kolonneniveau
Her er et eksempel på oprettelse af en CHECK
på kolonneniveau begrænsning.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Den del, der går CHECK (Price > 0)
er CHECK
begrænsning.
I dette tilfælde angiver det, at prisen skal være større end nul.
Lad os nu se, hvad der sker, hvis vi forsøger at indsætte data, der overtræder denne begrænsning.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Resultat:
Error: CHECK constraint failed: Products
CHECK
begrænsning virkede som forventet.
Jeg får det samme resultat, hvis jeg forsøger at bruge en negativ værdi.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
Resultat:
Error: CHECK constraint failed: Products
Men hvis jeg øger den til en værdi, der er større end nul, så INSERT
operationen lykkes.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
Resultat:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Kontrol på tabelniveau
En CHECK
på tabelniveau constraint kontrollerer data på tværs af hele rækken i stedet for kun en enkelt kolonne. Med andre ord kan du bruge en begrænsning på tabelniveau til at kontrollere data fra flere kolonner.
Her er et eksempel på en CHECK
på tabelniveau begrænsning.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
Denne tabel ligner den første, bortset fra at jeg har tilføjet en ekstra kolonne kaldet Rabat .
For CHECK
begrænsning, jeg tjekker nu, at prisen er større end rabatten (vi ønsker ikke muligheden for at have en rabat, der er større end den faktiske pris).
Her er, hvad der sker, hvis jeg forsøger at indsætte en rabat, der er større end prisen.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
Resultat:
Error: CHECK constraint failed: Products
Hvis jeg justerer rabatten, så den er lavere end prisen, indsættes den.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products;
Resultat:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5