====== 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