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

Crea un vincolo CHECK in SQLite

In SQLite, puoi creare un CHECK vincolo aggiungendo il codice applicabile all'interno di CREATE TABLE dichiarazione durante la creazione della tabella.

Se una tabella ha un CHECK vincolo su di esso e si tenta di inserire o aggiornare i dati che violano il CHECK vincolo, l'operazione avrà esito negativo con un errore.

Vincolo CHECK a livello di colonna

Ecco un esempio di creazione di un CHECK a livello di colonna vincolo.

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

La parte che va CHECK (Price > 0) è il CHECK vincolo.

In questo caso, specifica che il prezzo deve essere maggiore di zero.

Ora vediamo cosa succede se proviamo a inserire dati che violano questo vincolo.

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

Risultato:

Error: CHECK constraint failed: Products

Il CHECK il vincolo ha funzionato come previsto.

Ottengo lo stesso risultato se provo a utilizzare un valore negativo.

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

Risultato:

Error: CHECK constraint failed: Products

Ma se lo aumento a un valore maggiore di zero, allora INSERT operazione riuscita.

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

SELECT * FROM Products;

Risultato:

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

Vincolo CHECK a livello di tabella

Un CHECK a livello di tabella il vincolo controlla i dati nell'intera riga, anziché solo in una singola colonna. In altre parole, puoi utilizzare un vincolo a livello di tabella per controllare i dati da più colonne.

Ecco un esempio di un CHECK a livello di tabella vincolo.

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

Questa tabella è simile alla prima, tranne per il fatto che ho aggiunto una colonna aggiuntiva chiamata Sconto .

Per il CHECK vincolo, ora sto verificando che il prezzo sia maggiore dello sconto (non vogliamo la possibilità di avere uno sconto maggiore del prezzo effettivo).

Ecco cosa succede se provo a inserire uno sconto maggiore del prezzo.

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

Risultato:

Error: CHECK constraint failed: Products

Se regolo lo sconto in modo che sia inferiore al prezzo, viene inserito correttamente.

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

SELECT * FROM Products;

Risultato:

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