CHECK: Porovnání verzí
rozšíření |
|||
Řádek 18: | Řádek 18: | ||
id INT NOT NULL PRIMARY KEY, |
id INT NOT NULL PRIMARY KEY, |
||
name VARCHAR(50), |
name VARCHAR(50), |
||
salary INT NOT NULL, |
|||
CONSTRAINT check1 CHECK (id>0 AND salary>0) |
CONSTRAINT check1 CHECK (id>0 AND salary>0) |
||
); |
); |
Verze z 28. 6. 2013, 20:56
CHECK je kontrukce jazyka SQL, která představuje omezení hodnot určitého sloupce v tabulce. Dá se říci, že je to jeden z druhů konstrukce CONSTRAINT v tomto jazyce. Pro vytvoření jednoduchých omezení (v rámci jednoho sloupce) může být v některých SŘBD použito pouze klíčovým slovem CHECK, pro složitější podmínky omezení, pro omezení více sloupců a pro pojmenování omezení je před ním použito klíčové slovo CONSTRAINT. S pojmenovaným omezením dá pracovat jako s nedatovým objektem tabulky, mazat jej, přidávat jej a měnit. Obsahuje-li tabulka tento typ omezení, databázový engine při vkládání a úpravě záznamů kontroluje podmínku omezení a nedovolí vložit řádek, který by toto omezení porušoval (místo toho například hodí výjimku nebo chybovou hlášku).
Příklady
Omezení při vytváření tabulky
CREATE TABLE employees(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50),
salary INT CHECK (salary>0)
);
Výše uvedený příklad (poslední položka) vytvoří omezení pro plat coby kladné číslo (salary větší než 0). Tato syntaxe platí například pro MSSQL, MS Access nebo Oracle. MySQL omezení CHECK podporuje pouze formálně – SQL příkaz s omezením lze spustit (v tomto případě s čárkou před CHECK), ale skutečné vynucení tohoto omezení nefunguje.[1]
Pojmenované omezení při vytváření tabulky
Pro možnost použití více sloupců tabulky a pro pojmenování omezení se používá konstrukce s klíčovým slovem CONSTRAINT.
CREATE TABLE employees(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50),
salary INT NOT NULL,
CONSTRAINT check1 CHECK (id>0 AND salary>0)
);
Přidání omezení v existující tabulce
ALTER TABLE employees
ADD CHECK (salary>0);
Přidání pojmenovaného omezení v existující tabulce
ALTER TABLE employees
ADD CONSTRAINT check1 CHECK (salary>0 AND id>0);
Odstranění omezení v tabulce
ALTER TABLE employees
DROP CONSTRAINT check1;
Pro MySQL:
ALTER TABLE employees
DROP CHECK check1;
Změnu omezení lze v rámci ALTER TABLE vykonat zřetězení DROP a ADD. Následující příkaz změní existující omezení pro salary>0 na salary>1000:
ALTER TABLE employees
DROP CONSTRAINT check1,
ADD CONSTRAINT check1 CHECK (salary>1000 AND id>0);