I SQLite kan du skapa en CHECK
begränsning genom att lägga till den tillämpliga koden i CREATE TABLE
uttalande när du skapar tabellen.
Om en tabell har en CHECK
begränsning på det, och du försöker infoga eller uppdatera data som bryter mot CHECK
begränsning, kommer operationen att misslyckas med ett fel.
Kontrollbegränsning på kolumnnivå
Här är ett exempel på hur du skapar en CHECK
på kolumnnivå begränsning.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Den del som går CHECK (Price > 0)
är CHECK
begränsning.
I det här fallet anger den att priset måste vara större än noll.
Låt oss nu se vad som händer om vi försöker infoga data som bryter mot denna begränsning.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Resultat:
Error: CHECK constraint failed: Products
CHECK
begränsningen fungerade som förväntat.
Jag får samma resultat om jag försöker använda ett negativt värde.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
Resultat:
Error: CHECK constraint failed: Products
Men om jag ökar det till ett värde som är större än noll, då INSERT
operationen lyckas.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
Resultat:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Kontrollbegränsning på tabellnivå
En CHECK
på tabellnivå constraint kontrollerar data över hela raden, snarare än bara en enda kolumn. Med andra ord kan du använda en begränsning på tabellnivå för att kontrollera data från flera kolumner.
Här är ett exempel på en CHECK
på tabellnivå begränsning.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
Den här tabellen liknar den första, förutom att jag har lagt till en extra kolumn som heter Rabatt .
För CHECK
begränsning, jag kontrollerar nu att priset är större än rabatten (vi vill inte ha möjligheten att ha en rabatt som är större än det faktiska priset).
Det här är vad som händer om jag försöker lägga in en rabatt som är större än priset.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
Resultat:
Error: CHECK constraint failed: Products
Om jag justerar rabatten så att den är lägre än priset, infogas 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