Bonus: Tabulky
Tahle kapitola je navíc pro ty, kdo mají hotová cvičení a chtějí jít dál. Zbytek lekce ji nepotřebuje.
Zatím jsme pracovali s tabulkami, které v databázi už byly. Strukturu databáze mění poslední skupina příkazů SQL: CREATE TABLE tabulku zakládá, ALTER TABLE upravuje a DROP TABLE maže. Všechno si můžete vyzkoušet v databázi Sneaker shop. Přehled tabulek vlevo se po každém příkazu překreslí, takže změnu uvidíte hned.
Vytvoření / CREATE TABLE
Obchod chce u produktů sbírat recenze. Založíme pro ně novou tabulku:
CREATE TABLE reviews (
id INTEGER PRIMARY KEY,
product_id INTEGER NOT NULL REFERENCES products (id),
rating INTEGER NOT NULL CHECK (rating BETWEEN 1 AND 5),
comment TEXT,
created_at TEXT NOT NULL
);Za názvem tabulky jsou v závorce vyjmenované sloupce, oddělené čárkou. Každý sloupec má jméno, datový typ a případně omezení. PRIMARY KEY, NOT NULL i cizí klíč přes REFERENCES známe z minulé lekce. Nové je CHECK: podmínka, kterou musí splnit každá zapsaná hodnota, tady hodnocení od jedné do pěti hvězdiček. Sloupec comment žádné omezení nemá, recenze tedy může být i bez textu.
Do nové tabulky zapisujeme stejně jako do ostatních:
INSERT INTO reviews (product_id, rating, comment, created_at)
VALUES (1, 5, 'Sedí jako ulité.', '2026-10-25');Co se stane, když recenzi přiřadíme produktu, který neexistuje? A co hodnocení šest hvězdiček?
INSERT INTO reviews (product_id, rating, created_at)
VALUES (999, 4, '2026-10-26');
-- výsledek ???
INSERT INTO reviews (product_id, rating, created_at)
VALUES (1, 6, '2026-10-26');
-- výsledek ???Výsledky schválně neprozradíme, zkuste si je. Přehled datových typů a omezení najdete v nápovědě v nástroji.
Úprava / ALTER TABLE
Zákazníkům chceme ukládat i telefon. Do existující tabulky přidáme sloupec:
ALTER TABLE customers ADD COLUMN phone TEXT;Zákazníci, kteří už v tabulce jsou, mají v novém sloupci NULL. Proto nejde jen tak přidat sloupec s NOT NULL, databáze by neměla co zapsat do stávajících řádků:
Cannot add a NOT NULL column with default value NULLPomůže výchozí hodnota přes DEFAULT, kterou databáze doplní všem stávajícím řádkům:
ALTER TABLE products ADD COLUMN active INTEGER NOT NULL DEFAULT 1;Sloupec jde také přejmenovat nebo smazat a stejně tak jde přejmenovat celá tabulka:
ALTER TABLE customers RENAME COLUMN phone TO phone_number;
ALTER TABLE customers DROP COLUMN phone_number;
ALTER TABLE reviews RENAME TO product_reviews;Změnit typ existujícího sloupce SQLite neumí. Jiné databáze na to mají vlastní příkaz, v SQLite se musí založit nová tabulka a data se do ní přenesou.
Smazání / DROP TABLE
DROP TABLE product_reviews;DROP TABLE smaže tabulku i se všemi daty. Stejně jako u DELETE bez WHERE se databáze nezeptá, jestli to tak myslíme.
Zkusme teď smazat tabulku zákazníků:
DROP TABLE customers;
-- výsledek ???Proč to dopadlo právě takhle, odvodíte z kapitoly o změně dat. Smazanou tabulku i všechny ostatní změny vrátí tlačítko Obnovit databázi.