Přidání více řádků
Jeden INSERT může přidat několik řádků najednou. Za VALUES napište pro každý řádek jednu závorku a oddělte je čárkami. Tohle jsou tři nové recenze od zákazníků, kteří si hry koupili:
INSERT INTO recenze (hra_id, zakaznik_id, hvezdicky, komentar)
VALUES
(4, 4, 5, 'Zábava na celé hodiny.'),
(14, 2, 4, NULL),
(17, 1, 4, 'Rychlé a férové.');Na kartě Výsledky pak uvidíte Změněné řádky: 3. Všechny řádky mají jeden společný seznam sloupců, takže každý potřebuje hodnotu pro každý sloupec: druhá recenze nemá komentář, a tak dostane NULL. Mezi řádky patří čárka, za poslední středník. Několik řádků v jednom příkazu se napíše rychleji než INSERT pro každý zvlášť a databáze je také rychleji uloží.
Vyplnit nemusíte každý sloupec. Sloupec, který v seznamu vynecháte, dostane NULL. Tady recenze nemá komentář:
INSERT INTO recenze (hra_id, zakaznik_id, hvezdicky)
VALUES (20, 2, 5);
SELECT *
FROM recenze
WHERE hra_id = 20;| hra_id | zakaznik_id | hvezdicky | komentar |
|---|---|---|---|
| 20 | 2 | 5 | NULL |
| 20 | 4 | 4 | NULL |
To ale jde jen u sloupců, které smějí zůstat prázdné. Většina sloupců v tabulkách obchodu hodnotu mít musí, a když některý z nich vynecháte, třeba hvezdicky, databáze řádek odmítne: NOT NULL constraint failed: recenze.hvezdicky. Víc o takových pravidlech se dozvíte brzy.
Zvláštní případ je ID. Sloupec id, který tabulka definuje jako INTEGER PRIMARY KEY (takové jsou všechny sloupce id v Pixel Shopu), se vyplní sám: vynechte ho a SQLite dá novému řádku další číslo v pořadí, tedy nejvyšší ID v tabulce plus jedna. Objednávky končí číslem 30, takže nová objednávka dostane 31:
INSERT INTO objednavky (zakaznik_id, datum, stav)
VALUES (14, '2026-01-08', 'zaplaceno');
SELECT *
FROM objednavky
WHERE id > 28;| id | zakaznik_id | datum | stav |
|---|---|---|---|
| 29 | 3 | 2025-12-12 | zaplaceno |
| 30 | 4 | 2025-12-22 | zaplaceno |
| 31 | 14 | 2026-01-08 | zaplaceno |
Tak přidávají řádky skutečné aplikace: ID nechají vybrat databázi. Když ho zvolíte sami, může už být obsazené a databáze řádek odmítne (UNIQUE constraint failed: objednavky.id). V předchozím cvičení jste ID volili jen proto, abyste věděli, které řádky hledat.
Typická chyba: čárka za posledním řádkem. VALUES (4, 4, 5), (14, 2, 4),; skončí chybou near ";": syntax error. Mezi řádky patří čárka, za poslední jen středník.
Jak psát:
Pokyny
Obchod oznámil tři nové hry, které ještě nevyšly: Frost Giants (RPG, 1399 Kč, od 16 let), Pet Hotel (Simulace, 499 Kč, od 3 let) a Sky Racers (Závodní, 899 Kč, od 7 let). Přidejte je jedním příkazem INSERT. Vynechte sloupec id, který se vyplní sám, a sloupec vydano, protože data vydání zatím nikdo nezná.
Pod něj ukažte ID, název, cenu a datum vydání všech her, které ještě nevyšly, seřazené podle ID. Nové hry dostaly ID 21 až 23 a žádné datum vydání:
| id | nazev | cena | vydano |
|---|---|---|---|
| 18 | Robot Rebellion | 999 | NULL |
| 19 | Mystery Manor | 649 | NULL |
| 21 | Frost Giants | 1399 | NULL |
| 22 | Pet Hotel | 499 | NULL |
| 23 | Sky Racers | 899 | NULL |
Začněte programovat zdarma
2/9