SQL Constraints
Check Constraint slouží k zadání predikátu, který musí splňovat každý tuple v dané relaci. Omezuje hodnoty, které může sloupec ve vztahu nabývat.
- Predikát v kontrolním omezení může obsahovat dílčí dotaz.
- Kontrolní omezení definované na atributu omezuje rozsah hodnot pro daný atribut.
- Pokud hodnota přidávaná do atributu tuplu porušuje kontrolní omezení, kontrolní omezení se vyhodnotí jako false a příslušná aktualizace se přeruší.
- Kontrolní omezení se obvykle zadává příkazem CREATE TABLE v jazyce SQL.
Syntaxe:
CREATE TABLE pets( ID INT NOT NULL, Name VARCHAR(30) NOT NULL, Breed VARCHAR(20) NOT NULL, Age INT, GENDER VARCHAR(9), PRIMARY KEY(ID), check(GENDER in ('Male', 'Female', 'Unknown')) );
Poznámka: Kontrolní omezení ve výše uvedeném příkazu SQL omezuje příslušnost GENDER pouze k uvedeným kategoriím. Pokud je přidán nový tuple nebo je aktualizován existující tuple ve vztahu s GENDER, který nepatří do žádné ze tří uvedených kategorií, pak je příslušná aktualizace databáze přerušena.
Dotaz
Omezení: Na vysokou školu se mohou zapsat pouze studenti, jejichž věk >= 17 let.
Schema pro databázi studentů na univerzitě:
CREATE TABLE student( StudentID INT NOT NULL, Name VARCHAR(30) NOT NULL, Age INT NOT NULL, GENDER VARCHAR(9), PRIMARY KEY(ID), check(Age >= 17) );
Relace student:
StudentID | Jméno | Věk | Pohlaví |
---|---|---|---|
1001 | Ron | 18 | Muž |
1002 | Sam | 17 | Muž |
1003 | Georgia | 17 | Žena |
1004 | Erik | 19 | Neznámý |
1005 | Christine | 17 | Žena |
Vysvětlení: V uvedené relaci je věk všech studentů větší než roven 17 let, podle omezení uvedeného v kontrolním příkazu ve schématu relace. Pokud však bude proveden následující příkaz SQL:
INSERT INTO student(STUDENTID, NAME, AGE, GENDER) VALUES (1006, 'Emma', 16, 'Female');
Nebude provedena žádná aktualizace databáze a jako věk < 17 let.
Různé možnosti použití kontrolního omezení:
- S alter: Kontrolní omezení lze také přidat k již vytvořené relaci pomocí syntaxe:
alter table TABLE_NAME modify COLUMN_NAME check(Predicate);
- Přidání názvu proměnné ke kontrolnímu omezení:Kontrolnímu omezení lze přidat název proměnné pomocí syntaxe:
alter table TABLE_NAME add constraint CHECK_CONST check (Predicate);
- Odstranění kontrolního omezení: Odstranění kontrolního omezení ze vztahu v databázi ze serveru SQL pomocí syntaxe:
alter table TABLE_NAME drop constraint CHECK_CONSTRAINT_NAME;
- Odstranění kontrolního omezení: Tento článek napsal Mayank Kumar: Kontrolní omezení lze ze vztahu v databázi v MySQL odstranit pomocí syntaxe:
alter table TABLE_NAME drop check CHECK_CONSTRAINT_NAME;
Tento článek napsal Mayank Kumar. Pokud se vám GeeksforGeeks líbí a chtěli byste přispět, můžete také napsat článek pomocí stránky contribute.geeksforgeeks.org nebo poslat svůj článek na adresu [email protected]. Uvidíte, jak se váš článek objeví na hlavní stránce GeeksforGeeks, a pomůžete tak ostatním geekům.