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

Come abilitare/disabilitare i vincoli CHECK in SQLite

Se hai bisogno di abilitare o disabilitare tutti i CHECK vincoli in SQLite, puoi usare ignore_check_constraints Dichiarazione PRAGMA.

Questa istruzione pragma abilita o disabilita esplicitamente l'applicazione di CHECK vincoli. L'impostazione predefinita è disattivata, il che significa che CHECK i vincoli vengono applicati per impostazione predefinita.

Sintassi

La sintassi è questa:

PRAGMA ignore_check_constraints = boolean;

Dove booleano è un valore booleano.

  • Per disabilitare CHECK vincoli, questo può essere uno dei seguenti:
    • false
    • no
    • off
    • 0
  • Per abilitare CHECK vincoli, può essere uno dei seguenti:
    • true
    • yes
    • on
    • 1

Esempio

Per prima cosa, creiamo una tabella con un CHECK vincolo:

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

Ora possiamo attivare CHECK attivare o disattivare i vincoli come richiesto per far rispettare o meno tale vincolo.

Abilita CONTROLLA vincoli

Ecco un esempio di abilitazione di tutti i CHECK vincoli:

PRAGMA ignore_check_constraints = 0;

Come accennato, questo è comunque il valore predefinito. Quindi, se non usi questa istruzione PRAGMA CHECK i vincoli saranno già impostati su questo valore.

Ora proviamo quel CHECK i vincoli sono infatti abilitati tentando di inserire dati che violano quel CHECK vincolo:

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

Risultato:

Error: CHECK constraint failed: Products

Quindi il CHECK il vincolo è stato applicato come previsto.

Disabilita CONTROLLA vincoli

Ecco un esempio di disabilitazione di tutti i CHECK vincoli:

PRAGMA ignore_check_constraints = 1;

Ora proviamo a inserire nuovamente gli stessi dati e selezioniamo il risultato:

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

SELECT * FROM Products;

Risultato:

ProductId   ProductName  Price     
----------  -----------  ----------
1           Blue Widget  0.0       

Come previsto, i dati sono riusciti ad entrare nel database, pur violando il CHECK vincolo.