sql >> Database teknologi >  >> RDS >> SQLite

Opret en CHECK-begrænsning i SQLite

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       

  1. Viser billede fra PostgreSQL-database, bytea

  2. konverter Postgres geometriformat til WKT

  3. Opdater data via en funktion med tabelværdi i SQL Server

  4. Hvordan laver man en sikkerhedskopi af en enkelt tabel i en postgres-database?