CHECK
CHECK je konstrukce 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
[editovat | editovat zdroj]Omezení při vytváření tabulky
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]ALTER TABLE employees
ADD CHECK (salary>0);
Přidání pojmenovaného omezení v existující tabulce
[editovat | editovat zdroj]ALTER TABLE employees
ADD CONSTRAINT check1 CHECK (salary>0 AND id>0);
Pokud je v tabulce byť jen jediný řádek, který omezující podmínce nevyhovuje, SŘBD nedovolí omezení přidat a vyhodí chybovou hlášku.
Odstranění omezení v tabulce
[editovat | editovat zdroj]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);
CHECK TABLE
[editovat | editovat zdroj]CHECK TABLE je konstrukce SQL, která zkontroluje tabulku a nahlásí případné chyby. Pozná ji několik relačních databázových systémů. Syntaxe pro MySQL je:[2]
CHECK TABLE jméno_tabulky1[, jméno_tabulky2[, jméno_tabulky3…]] {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED};
Např. v MySQL tento příklad vrátí řádek s následujícími položkami Table – název kontrolované tabulky (včetně prefixu databáze), Op – operace; vrací „check“, Msg_type – typ vzkazu; vrací jedno z následujícího: status, error, info, note nebo warning; Msg_text – text vzkazu; je-li tabulka v pořádku, vrátí OK nebo Table is already up to date.
Obdoby v jiných databázích
[editovat | editovat zdroj]MS Access pro sloupce tabulek nabízí v návrhovém režimu kolonky „Podmínka“. Pro textové sloupce má také kolonku „Maska“, pomocí které lze zformátovat podobu hodnout sloupce – obsahuje zástupce alfanumerických, numerických znaků, atd., převod na malá/velká písmena a znaky, které se pouze zobrazí ale neuloží.