Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hksza, Ph.D. http://siret.cz/hksza
Osnva Seznámení s SQL Server Management Studiem (SSMS) Základní architektura Micrsft SQL Serveru 2008 Vytváření tabulek CREATE TABLE Integritní mezení Změna tabulky ALTER TABLE Aktualizace dat INSERT UPDATE Cvičení
SSMS
Architektura MSSQL 2008 Server MSSQL Server 1 Databáze1 schéma 1 schéma 2 schéma N MSSQL Server N Databáze1 schéma 1 schéma 2 schéma N. DatabázeN schéma 1 schéma 2 schéma N DatabázeN schéma 1 schéma 2 schéma N
Dkumentace MSSQL Micrsft SQL Server Bks Online (BOL) http://msdn.micrsft.cm/en-us/library/ms130214.aspx
CREATE TABLE CREATE TABLE name (slupec1 datvy_typ1 [DEFAULT value] [mezeni] [, slupec2 datvy_typ2 ] ) základní datvé typy v MSSQL INT FLOAT (N)CHAR(n), (N)VARCHAR(n) BIT MONEY DATETIME, DATE, TIME TEXT, (N)VARCHAR(MAX) IMAGE, BINARY(n), VARBINARY(MAX)
Integritní mezení (IO) NOT NULL slupec nesmí bsahvat NULL hdnty UNIQUE slupec nesmí bsahvat duplicity PRIMARY KEY UNIQUE + NOT NULL CHECK hdnta slupce musí dpvídat pdmínce pdmínka nesmí bsahvat pddtaz, puze jednduché prvnání FOREIGN KEY hdnta ve slupci (slupcích) musí bsahvat hdntu (hdnty) ze slupce (slupců) jiné tabulky značenéh (značených) jak primární klíč
CREATE TABLE - příklad CREATE TABLE publisher ( id INT PRIMARY KEY, name VARCHAR(256) NOT NULL UNIQUE, address VARCHAR(512)) CREATE TABLE bk ( id INT PRIMARY KEY, name VARCHAR(256) NOT NULL UNIQUE, authr VARCHAR(512) NOT NULL, price MONEY CHECK (price > 0), detail VARCHAR(MAX), reprint BIT DEFAULT 0, publisher_id INT FOREIGN KEY REFERENCES publisher(id))
Pjmenvané IO CREATE TABLE bk ( id INT, name VARCHAR(256) NOT NULL, authr VARCHAR(512) NOT NULL, price MONEY, detail VARCHAR(MAX), reprint BIT DEFAULT 0, publisher_id INT, CONSTRAINT pk_bk_id PRIMARY KEY(id), CONSTRAINT uq_bk_name UNIQUE(name), CONSTRAINT chk_bk_price CHECK(price > 0), CONSTRAINT fk_bk_publisher FOREIGN KEY (publisher_id) REFERENCES publisher(id))
Rzšířená referenční integrita FOREIGN KEY REFERENCES [ON DELETE ][ON UPDATE ] C se stane při smazání řádku, na který je dkazván? ON DELETE NO ACTION chyba ON DELETE CASCADE smazání dkazujícíh řádku ON DELETE SET NULL nastavení hdnty FK na NULL ON DELETE SET DEFAULT nastavení hdnty FK na defaultní hdntu C se stane při update dkazvanéh PK? ON UPDATE NO ACTION chyba ON UPDATE CASCADE update hdnty FK ON DELETE SET NULL nastavení hdnty FK na NULL ON DELETE SET DEFAULT nastavení hdnty FK na defaultní hdntu
IDENTITY autmatické genervání hdnt pr (především) PK slupce CREATE TABLE publisher ( id INT PRIMARY KEY IDENTITY(1,1), name VARCHAR(256) NOT NULL UNIQUE, address VARCHAR(512)) INSERT INTO publisher(name) VALUES('publisher''s name');
ALTER TABLE změna definice tabulky ALTER TABLE table_name ADD clumn_definitin ADD CONSTRAINT named_cnstraint_definitin ALTER COLUMN clumn_definitin DROP COLUMN clumn_name DROP CONSTRAINT cnstraint_name
ALTER TABLE - příklad ALTER TABLE bk ADD test REAL; GO ALTER TABLE bk ALTER COLUMN test INT; GO ALTER TABLE bk ADD CONSTRAINT chk_bk_test CHECK (test % 2 = 0); GO ALTER TABLE bk DROP CONSTRAINT chk_bk_test; GO ALTER TABLE bk DROP COLUMN test; GO GO uknčuje dávku v MSSQL
INSERT INTO INSERT INTO table_name[(clumn1, clumn2,, clumnn)] VALUES (value1, value2,, valuen) Každý INSERT vlží jeden nvý řádek Nevyplněné hdnty se nastaví na NULL (pkud je daný slupec NOT NULL, vyvlá se chyba) Přadí a pčet hdnt musí dpvídat definici slupců v INTO části
INSERT INTO - příklad INSERT INTO publisher(id, name) VALUES (1, 'publisher 1'); INSERT INTO publisher(name, id, address) VALUES ('publisher 2', 2, 'address 2') INSERT INTO publisher VALUES (3, 'publisher 3', 'address 2') INSERT INTO bk(id, authr, name, publisher_id) VALUES (1, 'authr1', 'name1', 2); INSERT INTO bk(id, authr, name, publisher_id) VALUES (2, 'authr1', 'name2', (SELECT id FROM publisher WHERE name = 'publisher 2'))
UPDATE table_name UPDATE SET clumn_name = value [, clumn_name = value, ] [FROM table_name] [WHERE cnditin] FROM klauzule v UPDATE je specifikum MSSQL
UPDATE příklad UPDATE bk SET price = 15 nastav cenu všech knih na 15 UPDATE bk SET price = 2*price zdvjnásb cenu všech knih UPDATE bk SET price = 2*price FROM bk b JOIN publisher p ON (b.publisher_id = p.id) WHERE p.address LIKE '%USA%' zdvjnásb cenu knih nakladatelů z USA tabulka bk ve FROM klauzuli se autmaticky identifikuje s tabulku bk z UPDATE části, tj. s updatvanu tabulku
DELETE DELETE FROM table_name [WHERE cnditin] Vymazání záznamů dpvídající pdmínce Není-li WHERE klauzule specifikvána, mažu se všechny záznamy v dané tabulce DELETE FROM bks WHERE price > 20
DROP TABLE Smazání tabulky DROP TABLE bk DROP TABLE publisher Na přadí záleží!