sql >> Databasteknik >  >> RDS >> SQLite

Skapa en CHECK-begränsning i SQLite

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       

  1. Resultat från e-postfrågor som en HTML-tabell i SQL Server (T-SQL)

  2. När ska man byta till en större RDS-instans

  3. Hur uppdaterar man en stor tabell med miljontals rader i SQL Server?

  4. Hur man hittar låsta rader i Oracle