sql >> Database >  >> RDS >> SQLite

Maak een CHECK-beperking in SQLite

In SQLite kunt u een CHECK . maken beperking door de toepasselijke code toe te voegen aan de CREATE TABLE statement bij het maken van de tabel.

Als een tafel een CHECK . heeft beperking op, en u probeert gegevens in te voegen of bij te werken die de CHECK . schenden beperking, zal de bewerking mislukken met een fout.

Controlebeperking op kolomniveau

Hier is een voorbeeld van het maken van een CHECK op kolomniveau beperking.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price 
    CHECK (Price > 0)
);

Het deel dat gaat CHECK (Price > 0) is de CHECK beperking.

In dit geval specificeert het dat de prijs groter dan nul moet zijn.

Laten we nu eens kijken wat er gebeurt als we gegevens proberen in te voegen die deze beperking schenden.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 0.00);

Resultaat:

Error: CHECK constraint failed: Products

De CHECK beperking werkte zoals verwacht.

Ik krijg hetzelfde resultaat als ik een negatieve waarde probeer te gebruiken.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', -1.00);

Resultaat:

Error: CHECK constraint failed: Products

Maar als ik het verhoog naar een waarde die groter is dan nul, dan is de INSERT operatie slaagt.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00);

SELECT * FROM Products;

Resultaat:

ProductId   ProductName  Price     
----------  -----------  ----------
1           Blue Widget  1.0       

CONTROLE-beperking op tabelniveau

Een CHECK op tabelniveau constraint controleert gegevens over de hele rij, in plaats van slechts een enkele kolom. Met andere woorden, u kunt een beperking op tabelniveau gebruiken om gegevens uit meerdere kolommen te controleren.

Hier is een voorbeeld van een CHECK op tabelniveau beperking.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price,
    Discount,
    CHECK (Price >= Discount)
);

Deze tabel is vergelijkbaar met de eerste, behalve dat ik een extra kolom heb toegevoegd met de naam Korting .

Voor de CHECK beperking, controleer ik nu of de prijs groter is dan de korting (we willen niet de mogelijkheid van een korting die groter is dan de werkelijke prijs).

Dit gebeurt er als ik een korting probeer in te voeren die groter is dan de prijs.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00, 2.00);

Resultaat:

Error: CHECK constraint failed: Products

Als ik de korting aanpas zodat deze lager is dan de prijs, is deze met succes ingevoegd.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00, 0.50);

SELECT * FROM Products;

Resultaat:

ProductId   ProductName  Price       Discount  
----------  -----------  ----------  ----------
1           Blue Widget  1.0         0.5       

  1. Hoe kan ik wachtwoorden hashen in postgresql?

  2. Oracle INTERSECT-operator uitgelegd

  3. Toegestane geheugengrootte van 8589934592 bytes uitgeput

  4. kan oci8 niet laden -> Fatale fout:oproep naar ongedefinieerde functie oci_connect()