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