In SQLite können Sie einen CHECK
erstellen Einschränkung, indem Sie den entsprechenden Code innerhalb von CREATE TABLE
hinzufügen Anweisung beim Erstellen der Tabelle.
Wenn eine Tabelle einen CHECK
hat Einschränkung darauf, und Sie versuchen, Daten einzufügen oder zu aktualisieren, die gegen den CHECK
verstoßen Beschränkung, schlägt der Vorgang mit einem Fehler fehl.
CHECK-Einschränkung auf Spaltenebene
Hier ist ein Beispiel für die Erstellung eines CHECK
auf Spaltenebene Einschränkung.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Der Teil, der CHECK (Price > 0)
wird ist der CHECK
Einschränkung.
In diesem Fall gibt es an, dass der Preis größer als Null sein muss.
Sehen wir uns nun an, was passiert, wenn wir versuchen, Daten einzufügen, die gegen diese Einschränkung verstoßen.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Ergebnis:
Error: CHECK constraint failed: Products
Der CHECK
Constraint funktionierte wie erwartet.
Ich erhalte dasselbe Ergebnis, wenn ich versuche, einen negativen Wert zu verwenden.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
Ergebnis:
Error: CHECK constraint failed: Products
Aber wenn ich es auf einen Wert erhöhe, der größer als Null ist, dann wird die INSERT
Vorgang erfolgreich.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
Ergebnis:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
CHECK-Einschränkung auf Tabellenebene
Ein CHECK
auf Tabellenebene Constraint prüft Daten über die gesamte Zeile und nicht nur über eine einzelne Spalte. Mit anderen Worten, Sie können eine Einschränkung auf Tabellenebene verwenden, um Daten aus mehreren Spalten zu überprüfen.
Hier ist ein Beispiel für ein CHECK
auf Tabellenebene Einschränkung.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
Diese Tabelle ähnelt der ersten, außer dass ich eine zusätzliche Spalte namens Rabatt hinzugefügt habe .
Für den CHECK
Einschränkung, ich überprüfe jetzt, ob der Preis größer ist als der Rabatt (wir wollen nicht die Möglichkeit haben, einen Rabatt zu haben, der größer als der tatsächliche Preis ist).
Folgendes passiert, wenn ich versuche, einen Rabatt einzufügen, der größer als der Preis ist.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
Ergebnis:
Error: CHECK constraint failed: Products
Wenn ich den Rabatt so anpasse, dass er niedriger als der Preis ist, wird er erfolgreich eingefügt.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products;
Ergebnis:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5