SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Erstellen Sie eine CHECK-Einschränkung in SQLite

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