sql >> Databáze >  >> RDS >> SQLite

Jak povolit/zakázat omezení CHECK v SQLite

Pokud budete někdy potřebovat povolit nebo zakázat všechny CHECK omezení v SQLite, můžete použít ignore_check_constraints prohlášení PRAGMA.

Toto pragma prohlášení výslovně povoluje nebo zakazuje vynucení CHECK omezení. Výchozí nastavení je vypnuto, což znamená CHECK omezení jsou standardně vynucena.

Syntaxe

Syntaxe vypadá takto:

PRAGMA ignore_check_constraints = boolean;

Kde je logická je booleovská hodnota.

  • Chcete-li zakázat CHECK omezení, může to být kterékoli z následujících:
    • false
    • no
    • off
    • 0
  • Chcete-li aktivovat CHECK omezení, může to být kterékoli z následujících:
    • true
    • yes
    • on
    • 1

Příklad

Nejprve vytvořte tabulku s CHECK omezení:

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

Nyní můžeme přepnout CHECK omezení zapněte nebo vypněte podle potřeby k vynucení nebo nevynucení daného omezení.

Povolit omezení CHECK

Zde je příklad povolení všech CHECK omezení:

PRAGMA ignore_check_constraints = 0;

Jak již bylo zmíněno, jedná se o výchozí hodnotu. Pokud tedy nepoužíváte tento příkaz PRAGMA CHECK omezení již budou nastavena na tuto hodnotu.

Nyní to otestujeme CHECK omezení jsou ve skutečnosti povolena pokusem o vložení dat, která porušují CHECK omezení:

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

Výsledek:

Error: CHECK constraint failed: Products

Takže CHECK omezení bylo vynuceno podle očekávání.

Zakázat omezení CHECK

Zde je příklad deaktivace všech CHECK omezení:

PRAGMA ignore_check_constraints = 1;

Nyní zkusme znovu vložit stejná data a vybrat výsledek:

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

SELECT * FROM Products;

Výsledek:

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

Jak se očekávalo, data se podařilo vstoupit do databáze, i když porušují CHECK omezení.


  1. Jak opravit adresu URL poskytovatele obsahu, která nebyla nalezena v poskytovateli obsahu pro Android?

  2. Tipy pro vzdálenou správu PostgreSQL

  3. Porovnání dat Oracle bylo přerušeno kvůli letnímu času

  4. Průvodce pro CTE v SQL Server