NOT NULL a DEFAULT

Sloupec bez jakéhokoli pravidla může zůstat prázdný: když ho INSERT vynechá, dostane NULL. Někdy je to v pořádku, třeba u data vydání hry, která ještě nevyšla. Hra bez názvu nebo bez ceny ale nedává smysl. NOT NULL za typem sloupce říká, že sloupec nesmí být prázdný, tedy že musí mít vždycky hodnotu. Takhle vznikla tabulka hry obchodu Pixel Shop:

CREATE TABLE hry (
    id INTEGER PRIMARY KEY,
    nazev TEXT NOT NULL,
    zanr TEXT NOT NULL,
    cena INTEGER NOT NULL,
    vydano TEXT,
    vek_od INTEGER NOT NULL
) STRICT;

NOT NULL má každý sloupec kromě vydano, jediného, který smí zůstat prázdný. (id ho nepotřebuje: primární klíč nikdy není NULL.) INSERT, který sloupec s NOT NULL vynechá nebo mu dá NULL, skončí chybou, jak jste viděli v minulé lekci:

INSERT INTO hry (nazev, zanr, cena)
VALUES ('Snow Trails', 'Sportovní', 499);
Error on line 1: NOT NULL constraint failed: hry.vek_od

DEFAULT (výchozí hodnota) dá sloupci hodnotu, kterou dostane, když ho INSERT vynechá. Třeba tabulka odběratelů novinek obchodu:

CREATE TABLE odberatele (
    id INTEGER PRIMARY KEY,
    email TEXT NOT NULL,
    jazyk TEXT NOT NULL DEFAULT 'cs',
    aktivni INTEGER NOT NULL DEFAULT 1
) STRICT;

INSERT INTO odberatele (email)
VALUES ('eva.novotna@mail.cz');

INSERT INTO odberatele (email, jazyk)
VALUES ('lena.weber@mail.de', 'de');

SELECT * FROM odberatele;
idemailjazykaktivni
1eva.novotna@mail.czcs1
2lena.weber@mail.dede1

Jazyk prvního odběratele ani to, že jsou oba odběry aktivní, nikdo psát nemusel. NOT NULL a DEFAULT se k sobě hodí: sloupec má vždycky hodnotu a INSERT ji musí uvést, jen když je jiná. Na pořadí obou slov nezáleží. Výchozí hodnota může být číslo, text v apostrofech nebo CURRENT_DATE, dnešní datum: sloupec pridano TEXT NOT NULL DEFAULT CURRENT_DATE si zapamatuje den, kdy byl každý řádek vložen.

Typická chyba: čekat, že DEFAULT nahradí NULL. Výchozí hodnota se použije, jen když INSERT sloupec vynechá. NULL napsané v INSERT zůstane NULL a s NOT NULL je to chyba:

INSERT INTO odberatele (email, jazyk)
VALUES ('tomas.ryba@mail.cz', NULL);
Error on line 1: NOT NULL constraint failed: odberatele.jazyk

Pokyny

Na podporu obchodu chodí požadavky zákazníků. Vytvořte tabulku pozadavky (STRICT) s těmito sloupci v tomto pořadí:

  • id – celočíselný primární klíč,
  • predmet – text, který musí být vždycky vyplněný,
  • stav – text, který musí být vždycky vyplněný; když ho INSERT vynechá, je 'nový',
  • priorita – celé číslo, které musí být vždycky vyplněné; když ho INSERT vynechá, je 2.

Vložte tři požadavky, každý jen se sloupci, které jsou tu uvedené:

  • předmět 'Nejde stáhnout Goal Rush', nic dalšího,
  • předmět 'Vrácení peněz za objednávku 18' a stav 'vyřízený',
  • předmět 'Špatná cena v košíku' a priorita 1.

Pak ukažte celou tabulku seřazenou podle id:

idpredmetstavpriorita
1Nejde stáhnout Goal Rushnový2
2Vrácení peněz za objednávku 18vyřízený2
3Špatná cena v košíkunový1

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

4/10