Primární klíče
V první lekci jste poznali primární klíč: sloupec, který označuje každý řádek, jako id tabulky hry. Pro primární klíč platí dvě pravidla: žádné dva řádky v něm nemají stejnou hodnotu a nikdy není NULL. Díky tomu WHERE id = 5 vždycky najde nejvýš jeden řádek a jiné tabulky mohou na řádek ukázat jeho klíčem.
Sloupec se stane primárním klíčem, když za jeho typ napíšete PRIMARY KEY. Třeba tabulka žánrů:
CREATE TABLE zanry (
id INTEGER PRIMARY KEY,
nazev TEXT
) STRICT;V SQLite umí INTEGER PRIMARY KEY ještě jednu věc: když INSERT sloupec vynechá, SQLite číslo vybere samo. Vezme o jedna větší, než je největší číslo v tabulce, nebo 1, když je tabulka prázdná. Odtud se v minulé lekci brala automatická ID:
INSERT INTO zanry (nazev)
VALUES ('RPG'), ('Závodní'), ('Logická');
SELECT * FROM zanry;| id | nazev |
|---|---|
| 1 | RPG |
| 2 | Závodní |
| 3 | Logická |
ID můžete zadat i sami, ale číslo, které už je obsazené, databáze odmítne. Chyba mluví o UNIQUE (jedinečný), protože primární klíč je jedinečný; víc se o UNIQUE dozvíte za chvíli:
INSERT INTO zanry (id, nazev)
VALUES (2, 'Sportovní');Error on line 1: UNIQUE constraint failed: zanry.idKterý sloupec má být primárním klíčem? Obvykle sloupec id s číslem a ničím jiným. Jméno nebo e-mail se také mohou zdát jedinečné, ale lidé si e-maily mění a dva zákazníci se mohou jmenovat stejně. Číslo, které se nikdy nemění, je pro ostatní tabulky to nejbezpečnější, na co mohou ukazovat.
Jiné databáze vytvářejí automatické ID po svém, například id SERIAL v PostgreSQL nebo id INT AUTO_INCREMENT v MySQL. V SQLite můžete potkat také INTEGER PRIMARY KEY AUTOINCREMENT: to zajistí, že se číslo smazaného řádku už nikdy znovu nepoužije, což budete potřebovat jen zřídka. A primární klíč může mít i několik sloupců, jako ten v tabulce polozky. Takový vytvoříte později v této lekci.
Typická chyba: INT PRIMARY KEY místo INTEGER PRIMARY KEY. Jinde INT a INTEGER znamenají totéž, ale jen INTEGER PRIMARY KEY zařídí, že SQLite řádky očísluje. S INT zůstane ID prázdné, když ho INSERT vynechá, a primární klíč prázdný být nesmí:
CREATE TABLE zanry (
id INT PRIMARY KEY,
nazev TEXT
) STRICT;
INSERT INTO zanry (nazev)
VALUES ('RPG');Error on line 6: NOT NULL constraint failed: zanry.idJak psát:
Pokyny
Vytvořte tabulku vydavatele (STRICT) pro firmy, které hry vydávají, se třemi sloupci: id, celočíselný primární klíč, a pak nazev a zeme, oba textové.
Vložte tři vydavatele bez ID a nechte SQLite, aby je očísloval (název, země):
'Northwind Games', 'USA''Blue Fox Studio', 'Kanada''Hradní hry', 'Česko'
Pak ukažte celou tabulku seřazenou podle id:
| id | nazev | zeme |
|---|---|---|
| 1 | Northwind Games | USA |
| 2 | Blue Fox Studio | Kanada |
| 3 | Hradní hry | Česko |
Před dotaz přidejte vydavatele s ID 20, 'Sakura Soft', 'Japonsko', a za něj ještě jednoho bez ID, 'Red Panda Games', 'Polsko'. Jaké ID dostane? Spusťte soubor a podívejte se:
| id | nazev | zeme |
|---|---|---|
| 1 | Northwind Games | USA |
| 2 | Blue Fox Studio | Kanada |
| 3 | Hradní hry | Česko |
| 20 | Sakura Soft | Japonsko |
| 21 | Red Panda Games | Polsko |
Začněte programovat zdarma
3/10