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

Vytvořte omezení CHECK v SQLite

V SQLite můžete vytvořit CHECK omezení přidáním příslušného kódu do CREATE TABLE při vytváření tabulky.

Pokud tabulka obsahuje CHECK omezení a pokusíte se vložit nebo aktualizovat data, která porušují CHECK omezení, operace selže s chybou.

Omezení KONTROLY na úrovni sloupců

Zde je příklad vytvoření CHECK na úrovni sloupce omezení.

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

Část, která jde CHECK (Price > 0) je CHECK omezení.

V tomto případě určuje, že cena musí být větší než nula.

Nyní se podívejme, co se stane, když se pokusíme vložit data, která toto omezení porušují.

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

Výsledek:

Error: CHECK constraint failed: Products

CHECK omezení fungovalo podle očekávání.

Dostanu stejný výsledek, když se pokusím použít zápornou hodnotu.

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

Výsledek:

Error: CHECK constraint failed: Products

Ale pokud ji zvýším na hodnotu, která je větší než nula, pak INSERT operace úspěšná.

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

SELECT * FROM Products;

Výsledek:

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

Omezení KONTROLY na úrovni tabulky

CHECK na úrovni tabulky omezení kontroluje data v celém řádku, nikoli pouze v jednom sloupci. Jinými slovy, můžete použít omezení na úrovni tabulky ke kontrole dat z více sloupců.

Zde je příklad CHECK na úrovni tabulky omezení.

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

Tato tabulka je podobná první, až na to, že jsem přidal další sloupec s názvem Sleva .

Pro CHECK omezení, nyní kontrolujem, zda je cena vyšší než sleva (nechceme mít možnost mít slevu, která je větší než skutečná cena).

Co se stane, když se pokusím vložit slevu, která je větší než cena.

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

Výsledek:

Error: CHECK constraint failed: Products

Pokud slevu upravím tak, aby byla nižší než cena, vloží se úspěšně.

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

SELECT * FROM Products;

Výsledek:

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

  1. if (vyberte počet (sloupec) z tabulky)> 0 potom

  2. Vrátit všechny cizí klíče, které odkazují na danou tabulku v SQL Server

  3. Zhroucení MySQL Innodb

  4. Upozornění:mysql_fetch_array():zadaný argument není platným výsledkem MySQL