UNIQUE a CHECK
Primární klíč zajistí, že žádné dva řádky nemají stejné ID. Často ale musí být jedinečný i jiný sloupec: dva zákazníci nemohou mít stejný e-mail, jinak by obchod nevěděl, čí je to účet. To říká UNIQUE (jedinečný) za typem sloupce. Turnaje obchodu by si mohly vést hráče takhle:
CREATE TABLE hraci (
id INTEGER PRIMARY KEY,
prezdivka TEXT NOT NULL UNIQUE,
vek INTEGER NOT NULL CHECK (vek >= 13)
) STRICT;Druhého hráče s přezdívkou, která už je obsazená, databáze odmítne. Nevloží se ani jeden z obou řádků: příkaz, který skončí chybou, nic nezmění.
INSERT INTO hraci (prezdivka, vek)
VALUES ('NightOwl', 15),
('NightOwl', 22);Error on line 1: UNIQUE constraint failed: hraci.prezdivkaUNIQUE dovolí NULL, a to i mnohokrát: NULL znamená žádnou hodnotu a jedna chybějící hodnota se nerovná jiné. Když musí mít sloupec hodnotu vždycky, přidejte NOT NULL jako výše. E-mail zákazníků obchodu je také TEXT NOT NULL UNIQUE.
CHECK (kontrola), za kterým následuje podmínka v závorkách, nastaví pravidlo, které musí splnit každý řádek. Podmínka se píše stejně jako ve WHERE a turnaje výše jsou pro hráče od 13 let:
INSERT INTO hraci (prezdivka, vek)
VALUES ('Prcek', 11);Error on line 1: CHECK constraint failed: vek >= 13Tabulky obchodu CHECK také používají: hvězdičky recenze musí být BETWEEN 1 AND 5, počet kusů > 0 a stav objednávky IN ('zaplaceno', 'vraceno'). CHECK, který porovnává dva sloupce, nebo UNIQUE pro dva sloupce dohromady se píše za poslední sloupec, na samostatný řádek:
CREATE TABLE turnaje (
id INTEGER PRIMARY KEY,
nazev TEXT NOT NULL,
zacatek TEXT NOT NULL,
konec TEXT NOT NULL,
CHECK (konec >= zacatek),
UNIQUE (nazev, zacatek)
) STRICT;UNIQUE (nazev, zacatek) dovolí dva turnaje se stejným názvem i dva, které začínají ve stejný den, ale ne dva se stejným názvem ve stejný den.
Typická chyba: zapomenout, že CHECK pustí NULL. Když je ve vek NULL, podmínka vek >= 13 není pravdivá ani nepravdivá a CHECK řádek odmítne, jen když je jeho podmínka nepravdivá. Proto sloupec s CHECK obvykle potřebuje i NOT NULL.
Jak psát:
Pokyny
Obchod chce rozdávat slevové kupony. Vytvořte tabulku kupony (STRICT) s těmito sloupci v tomto pořadí:
id– celočíselný primární klíč,kod– text, vždycky vyplněný, a žádné dva kupony nesmějí mít stejný kód,sleva– sleva v procentech, celé číslo, vždycky vyplněné, od 5 do 50,plati_do– poslední den, kdy jde kupon použít, vždycky vyplněný.
Vložte tyto čtyři kupony (kód, sleva, poslední den):
'VITEJTE10', 10, '2026-12-31''ZIMA25', 25, '2026-02-28''BLESK50', 50, '2026-01-15''JARO10', 10, '2026-05-31'
Pak ukažte celou tabulku seřazenou podle slevy od největší a kupony se stejnou slevou podle kódu:
| id | kod | sleva | plati_do |
|---|---|---|---|
| 3 | BLESK50 | 50 | 2026-01-15 |
| 2 | ZIMA25 | 25 | 2026-02-28 |
| 4 | JARO10 | 10 | 2026-05-31 |
| 1 | VITEJTE10 | 10 | 2026-12-31 |
Začněte programovat zdarma
5/10