====== SQL - CRUD ======
Na minulých cvičeních jsme probrali základy dotazování v jazyku SQL. Nyní se podíváme na další příkazy.
Zkratka v názvu cvičení **CRUD** vyjadřuje (create,read,update,delete). Doposud jsme se zabývali "čtením - read" dotazováním do databáze. Dnes se zaměříme na další práci s daty (INSERT, UPDATE, DELETE) i na práci s tabulkami (CREATE TABLE, ALTER, DROP).
==== Vytvoření, změna struktury a mazání tabulek ====
=== Vytvoření tabulky ===
CREATE TABLE jméno_tabulky (
jméno_sloupce_1 datový_typ [DEFAULT výraz] [integritní omezení],
...
jméno_sloupce_N datový_typ [DEFAULT výraz] [integritní omezení],
další_integritní_omezení
)
CREATE TABLE kniha( \\
kniha_id int, \\
nazev varchar(100), \\
autor varchar(100), \\
pocet_stran int, \\
vydani int );
**Primární klíč:**
CREATE TABLE kniha( \\
kniha_id int PRIMARY KEY, \\
nazev varchar(100), \\
autor varchar(100), \\
pocet_stran int, \\
vydani int );
**Přidání kontroly nevyplněné hodnoty (NOT NULL) a kontroly hodnoty (CHECK):**
CREATE TABLE kniha( \\
kniha_id int PRIMARY KEY, \\
nazev varchar(100) NOT NULL, \\
autor varchar(100), \\
pocet_stran int CHECK (pocet_stran > 0), \\
vydani int );
**Kontrola více hodnot (možno kontrolovat i např. součty a rozdíly hodnot polí):**
CREATE TABLE kniha( \\
kniha_id int PRIMARY KEY, \\
nazev varchar(100) NOT NULL, \\
autor varchar(100), \\
pocet_stran int, \\
vydani int, \\
CONSTRAINT con1 CHECK (pocet_stran > 0 AND vydani > 0) );
**Unikátní hodnota:**
CREATE TABLE kniha( \\
kniha_id int PRIMARY KEY, \\
nazev varchar(100) NOT NULL, \\
autor varchar(100), \\
pocet_stran int, \\
vydani int, \\
UNIQUE(nazev) );
**Cizí klíče:**
CREATE TABLE kniha( \\
kniha_id int PRIMARY KEY, \\
nazev varchar(100) NOT NULL );
CREATE TABLE vytisk( \\
vytisk_id integer PRIMARY KEY, \\
kniha_id integer, \\
police integer, \\
FOREIGN KEY (kniha_id) REFERENCES kniha (kniha_id) );
Další varianty a příklady lze najít v [[http://www.postgresql.org/docs/8.4/static/sql-createtable.html|dokumentaci PostgreSQL]].
=== Změna struktury tabulky ===
ALTER TABLE jméno_tabulky (
ADD COLUMN jméno_sloupce typ [integritní omezení],
ALTER COLUMN jméno_sloupce typ [integritní omezení],
DROP COLUMN jméno_sloupce,
RENAME COLUMN jméno_sloupce TO nové_jméno_sloupce,
RENAME TO nové_jméno_tabulky
)
ALTER TABLE kniha ADD COLUMN vydavatel varchar(50);\\
ALTER TABLE kniha DROP COLUMN vydavatel;\\
ALTER TABLE kniha RENAME COLUMN pocet_stran TO pages;\\
ALTER TABLE kniha RENAME TO books;\\
ALTER TABLE kniha ALTER COLUMN autor TYPE varchar(120);
Další varianty a příklady lze najít v [[http://www.postgresql.org/docs/8.4/static/sql-altertable.html|dokumentaci PostgreSQL]].
=== Mazání tabulky ===
DROP TABLE jméno_tabulky
DROP TABLE kniha
==== Vkládání, úprava a mazání údajů v tabulkách ====
**Vkládání nových dat do tabulky**
INSERT INTO jméno_tabulky (seznam sloupců) VALUES (hodnoty v pořadí uvedených sloupců)
Seznam sloupců je nepovinný, pokud není seznam uveden, berou se všechny sloupce v pořadí, v jakém byly vytvořeny při vytváření tabulky (CREATE TABLE).
INSERT INTO kniha VALUES (1,'Myslime objektove v jazyku Java', 'Rudolf Pecinovsky', 576); \\
INSERT INTO kniha (kniha_id,nazev) VALUES (1,'Myslime objektove v jazyku Java');
**Úprava dat v tabulce**
UPDATE jméno_tabulky SET sloupec = nová_hodnota WHERE podmínka
UPDATE kniha SET vydani=2 where nazev='Myslime objektove v jazyku Java'
v rámci jednoho příkazu UPDATE lze upravovat i několik sloupců najednou\\
UPDATE kniha SET vydani=2,pocet_stran=580 where nazev='Myslime objektove v jazyku Java'
**Mazání dat v tabulce**
DELETE FROM jméno_tabulky WHERE podmínka
Smazání všech dat v tabulce \\
DELETE FROM kniha
Smazání všech druhých vydání knih \\
DELETE FROM kniha WHERE vydani=2