Omezení
Omezení slouží pro udržení databáze v konzistentním stavu. Také pomáhá zabránit vkládání neplatných dat do tabulky databáze. Již samotná definice sloupce pomocí některého z datových typů představuje určité omezení. Definujeme-li například sloupec jako CHAR, tím jej předurčujeme k uchovávání pouze znaků. Při pokusu o vložení libovolného čísla dostaneme chybovou hlášku. Možností, jak zajistit určitá omezení je více a právě jim bych se rád v následujícím článku věnoval.NOT NULL
Omezení NOT NULL zamezuje vložení prázdné hodnoty do sloupce. V následujícím příkladu je vytvořena tabulka s omezením NOT NULL. Při pokusu o vložení prázdné hodnoty do tabulky příkazem INSERT a také při pokusu o modifikaci prázdné hodnoty bude vygenerována chybová hláška.
CREATE TABLE tab1 (col1 CHAR(3), col2 INTEGER NOT NULL);
INSERT INTO tab1 VALUES ('abc' , NULL);
ERROR: Fail to add null value in not null attribute COL2
INSERT INTO tab1 (col1) VALUES ('abc');
ERROR: Fail to add null value in not null attribute COL2
UPDATE tab1 SET col2 = NULL;
ERROR: Fail to add null value in not null attribute COL2
INSERT INTO tab1 VALUES ('abc' , 123 );
SELECT * FROM tab1;
COL1 | COL2
--------------------
Abc | 123
Další možností, jak zabránit vložení prázdné hodnoty je definovat výchozí hodnotu. Při pokusu o vložení prázdné hodnoty příkazem INSERT je vložena hodnota výchozí.
CREATE TABLE tab2 (col1 INTEGER, col2 INTEGER NOT NULL DEFAULT 666);
INSERT INTO tab2 VALUES (123);
SELECT * FROM tab2;
COL1 | COL2
--------------------
123 | 666
Omezení UNIQUE
Omezení UNIQUE zabraňuje vložení duplicitních hodnot do sloupce tabulky, neboli zajistí jedinečnost hodnot sloupce. Při jeho použití je vytvořen jedinečný index sloupce. V následujícím příkladu je příklad zamezující vložení duplicitních hodnot do tabulky databáze. Zajímavé je, že do jedinečného sloupce je možné vložit více prázdných hodnot.
CREATE TABLE tab3 (col1 INTEGER UNIQUE);
INSERT INTO tab3 VALUES (1);
INSERT INTO tab3 VALUES (1);
ERROR: Cannot insert duplicate key into unique index
INSERT INTO tab3 VALUES (null);
INSERT INTO tab3 VALUES (null);
SELECT * FROM tab3;
COL1
-------
1
NULL
NULL
Tvoříme-li omezení UNIQUE pro více sloupců, pak nelze toto omezení použít jako omezení sloupce. V tomto případě je nutné použít samostatný řádek UNIQUE pro specifikaci sloupců. Které tvoří omezení. Takto vytvoříme jedinečné omezení tabulky. V následujícím kódu je příklad používající vícesloupcová omezení. Sloupce "col1" a "col2" nemusejí být jedinečné, ale jejich kombinace ano. Například v tabulce, kde evidujeme data narození a rodná čísla, je možné, aby dva lidé byli narozeni ve stejný den, ale rodná čísla musejí mít odlišná.
CREATE TABLE tab4 (Datum DATE, rc INTEGER, UNIQUE (datum, rc));
Autor: Robert Habrman