43
SQL – DDL CREATE ALTER DROP Schema Table Tablespace Index View Domain Constraint ... DECLARE TABLE (DB2) 1/43

1/43 SQL – DDL - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~gordana/UvodRBP/SQL-DDL-DML-DCL.pdf · create table:atributi nad domenima, on update efekat create table ki (k_sif

Embed Size (px)

Citation preview

SQL – DDL

• CREATE

• ALTER

• DROP• Schema

• Table

• Tablespace

• Index

• View

• Domain

• Constraint

• ...

• DECLARE TABLE (DB2)

1/43

SQL DDL: CREATE SCHEMA

• CREATE SCHEMA ime-sheme

[ AUTHORIZATION ime-vlasnika-sheme]

[ CREATE TABLE iskaz {, CREATE TABLE iskaz }]|

[ CREATE VIEW iskaz {, CREATE VIEW iskaz }] |

[ CREATE INDEX iskaz {, CREATE INDEX iskaz}] |

[ GRANT iskaz {, GRANT iskaz } ]

2/43

SQL DDL: DROP SCHEMA

• DROP SCHEMA ime-sheme RESTRICT

3/43

SQL DDL: bazna tabela - CREATE

TABLE

• CREATE TABLE ime-bazne-tabele

(def-kolone {, def-kolone}

[, def-prim-kljuca]

[, def-str-kljuca {, def-str.kljuca}])

[, uslov-ogranicenja {, uslov-ogranicenja}])

[drugi-parametri]

4/43

SQL DDL: CREATE TABLE (cont.)

• def-kolone:

ime-kolone tip-podatka

[NOT NULL[[WITH] DEFAULT [vrednost]]]

tip-podatka:

INT (32) SMALLINT (16) BIGINT (64)

DEC(p,q) (1<=p<=31, 0<=q<=p);

FLOAT(p) ili REAL(1<=p<=24), DOUBLE, FLOAT (25<=p<=53)

CHAR(m)

CHAR VARCHAR TEXT BLOB

DATE TIME

Itd.

5/43

SQL DDL: CREATE TABLE definicija

primarnog ključa

• PRK:

[CONSTRAINT ime] PRIMARY KEY

(ime-kolone {, ime-kolone})

• NOT NULL kolone

6/43

SQL DDL: CREATE TABLE definicija

stranog ključa• STK:

[CONSTRAINT ime] FOREIGN KEY ( kolona {,

kolona})

REFERENCES odnosna-tabela

[ON DELETE efekat]

[ON UPDATE efekat]

7/43

SQL DDL: ON DELETE efekat

• NO ACTION (podrazumevano, posle svih)

• RESTRICT(pre svih)

• SET NULL

• CASCADE

8/43

SQL DDL: ON UPDATE efekat

• NO ACTION (podrazumevano dejstvo)

• RESTRICT

9/43

SQL DDL: CREATE TABLE: uslov

ograničenja• CONSTRAINT ime CHECK ( uslov)

• Primer:

CONSTRAINT GODTIR CHECK

(GODINA >= 1980 OR TIRAZ >=5000)

• Uslov za kolonu: uz definiciju kolone

• Primer – uz kolonu K_SIF:

CONSTRAINT BROJ_KNJIGE

CHECK (VALUE >= 'k1' AND VALUE <= 'k5001')

10/43

CREATE TABLE: primer

CREATE TABLE K

(K_SIF CHAR(5) NOT NULL,

NASLOV CHAR(50) NOT NULL WITH DEFAULT,

OBLAST CHAR(20),

PRIMARY KEY (K_SIF))

11/43

CREATE TABLE: primer

CREATE TABLE I

(I_SIF CHAR(6) NOT NULL,

NAZIV CHAR(20) NOT NULL WITH DEFAULT,

STATUS SMALLINT,

DRZAVA CHAR(20) NOT NULL WITH DEFAULT,

PRIMARY KEY (I_SIF))

12/43

CREATE TABLE: primer

CREATE TABLE KI

(K_SIF CHAR(5) NOT NULL,

I_SIF CHAR(6) NOT NULL,

IZDANJE SMALLINT NOT NULL,

GODINA SMALLINT,

TIRAZ INTEGER,

PRIMARY KEY (K_SIF, I_SIF, IZDANJE),

FOREIGN KEY (K_SIF) REFERENCES K ON DELETE RESTRICT ON UPDATE RESTRICT,

FOREIGN KEY (I_SIF) REFERENCES I ON DELETE CASCADE)

13/43

ALTER TABLE

• ALTER TABLE bazna-tabela

ADD ime-kolone tip-podataka [NOT NULL [WITH]

DEFAULT [ vrednost]]

| ADD def-prim-kljuca

| ADD def-str-kljuca

| ADD uslov-ogranicenja

| DROP def-prim-kljuca

| DROP def-str-kljuca

| DROP uslov-ogranicenja

| drugi parametri

14/43

DROP TABLE

• DROP TABLE bazna-tabela

15/43

CREATE, DROP INDEX

• CREATE [UNIQUE] INDEX ime-indeksa ON bazna-tabela

( ime-kolone [redosled] {, ime-kolone

[redosled]})

[ drugi-parametri]

• Primer:

CREATE INDEX XKIC ON KI (CENA)

• DROP INDEX ime-indeksa

16/43

CREATE, DROP VIEW

• CREATE VIEW ime-pogleda [( kolona {, kolona})]

AS puni upitni blok

[WITH CHECK OPTION]

• Primer:

• CREATE VIEW SRBIZD

AS SELECT I SIF, NAZIV

FROM I

WHERE DRZAVA=‘Srbija'

• DROP VIEW ime-pogleda

• Primer: DROP VIEW SRBIZD

17/43

SQL - 92 – DDL: CREATE DOMAIN

• Od SQL 92:

• CREATE DOMAIN naziv-domena [AS] tip-podataka

[ podrazumevana-definicija ]

[ lista-definicija-ogranicenja-domena ]

• DROP DOMAIN naziv-domena opcija (cascade | restrict)

18/43

SQL – DDL: CREATE DOMAIN

• tip-podataka - skalarni tip, i:

BIT [VARYING] (n)

INTERVAL

DATE

TIME

TIMESTAMP

19/43

SQL – DDL: CREATE DOMAIN

• podrazumevana-definicija :

DEFAULT podrazumevana-vrednost

• Na primer,

DEFAULT NULL

• lista-definicija-ogranicenja-domena, npr.

CREATE DOMAIN K_SIF AS CHAR(5) DEFAULT '?'

CONSTRAINT BROJ_KNJIGE

CHECK (VALUE >= 'k1' AND VALUE <= 'k5001')

20/43

SQL – DDL: CREATE DOMAIN

• Opcija pri uklanjanju domena može biti RESTRICT ili

CASCADE

• ALTER DOMAIN

• SET, DROP DEFAULT

• ADD, DROP CONSTRAINT

• Ne podržava pravu semantiku domena

21/43

CREATE TABLE: atributi nad domenima,

ON UPDATE efekat

CREATE TABLE KI

(K_SIF K_SIF NOT NULL,

I_SIF I_SIF NOT NULL,

IZDANJE IZDANJE NOT NULL,

GODINA GODINA NULL,

TIRAZ TIRAZ 0,

PRIMARY KEY (K_SIF, I_SIF, IZDANJE),

FOREIGN KEY (K_SIF) REFERENCES K

ON DELETE NO ACTION

ON UPDATE NO ACTION,

FOREIGN KEY (I_SIF) REFERENCES I

ON DELETE CASCADE

ON UPDATE CASCADE,

CHECK (IZDANJE>0 AND IZDANJE<50 ))

22/43

DROP TABLE: uklanjanje

DROP TABLE [RESTRICT | CASCADE] – pogled,

uslov ograničenja

23/43

Specifični uslov integriteta nad više tabela

• CREATE ASSERTION ime-pravila CHECK( uslov)

• DROP ASSERTION ime-pravila

• Uslov: logički izraz proizvoljne složenosti, kao u WHERE liniji, npr.

• CREATE ASSERTION KI1 CHECK(NOT EXISTS ( SELECT * FROM I JOIN KI ON I.I_SIF=KI.I_SIF

WHERE I.STATUS < 20 AND KI.TIRAZ > 5000))

24/43

SQL DML: unošenje

INSERT INTO ime-tabele …

1. Unošenje pojedinačne vrste

2. Unošenje bloka

25/43

SQL DML: unošenje

• INSERT INTO ime-tabele [( ime-kolone {,ime-kolone})]

VALUES ( konstanta {,konstanta})

• INSERT INTO ime-tabele [( ime-kolone {,ime-kolone})]

puni upitni blok

26/43

SQL: unošenje pojedinačne vrste

INSERT INTO K (K_SIF, NASLOV)

VALUES (‘k7’, ‘Čarobna šuma’)

Isto:

• INSERT INTO K (K_SIF, NASLOV, OBLAST)

VALUES ('k7', ' Čarobna šuma ', NULL)

Integritet

• INSERT INTO KI (K_SIF, I_SIF, IZDANJE, TIRAZ)

VALUES ('k20', 'i20', 3, 10000) - odbijen

27/43

SQL: unošenje bloka

• CREATE TABLE IP_DRZAVA

(I_SIF CHAR(6) NOT NULL,

P_SIF CHAR(6) NOT NULL,

DRZAVA CHAR(20),

PRIMARY KEY (I_SIF,P_SIF));

INSERT INTO IP_DRZAVA

SELECT I_SIF, P_SIF, I.DRZAVA

FROM I, P

WHERE I.DRZAVA = P.DRZAVA

28/43

SQL: unošenje bloka - rezultat

SELECT *

FROM IP_DRZAVA

29/43

SQL: unošenje bloka - WITH

• CREATE TABLE IZD_BC

(NAZIV CHAR(20) NOT NULL)

• INSERT INTO IZD_BC

WITH PI AS

(SELECT DISTINCT IME, NAZIV

FROM P JOIN KP ON P.P_SIF=KP.P_SIF

JOIN KI ON KP.K_SIF=KI.K_SIF

JOIN I ON KI.I_SIF=I.I_SIF)

SELECT NAZIV

FROM PI

WHERE IME='B.Copic'

30/43

SQL: ažuriranje

• UPDATE ime-tabele

SET ime-kolone = izraz {,ime-kolone = izraz}

[ WHERE logicki-izraz ]

Na primer

UPDATE KI

SET TIRAZ = TIRAZ*1.1

WHERE I_SIF = ‘i3’

• Integritet entiteta

• Referencijalni integritet

31/43

SQL: ažuriranje - primeri

• UPDATE KI

SET I_SIF = 'i6'

WHERE I_SIF = 'i4‘

odbija se

• UPDATE KI

SET TIRAZ = TIRAZ * 1.1

WHERE I_SIF IN

(SELECT I_SIF

FROM I

WHERE DRZAVA = 'Srbija')

32/43

SQL: brisanje

• DELETE FROM ime-tabele

[ WHERE logicki-izraz ]

• Na primer

DELETE FROM KI

WHERE I_SIF = ‘i4’

• Referencijalni integritet, na primer:

• DELETE FROM I

WHERE I_SIF='i3'

33/43

SQL: Korelisani podupit u ažuriranju i

brisanju• Na primer: Izbrisati izdavače koji izdaju knjigu sa

šifrom k3.

• DELETE FROM I

WHERE 'k3' IN

(SELECT KI.K_SIF

FROM KI

WHERE KI.I_SIF = I.I_SIF)

34/43

SQL: DCL

• Deo jezika koji se odnosi na bezbednost i zaštitu

podataka

• Pogledi - mogu da se koriste za sakrivanje osetljivih

podataka od neautorizovanih korisnika

• Podsistem za autorizaciju, koji dodeljuje korisniku

određena prava pristupa

• Dopušta korisniku da ta prava prenosi na druge

korisnike / preneta prava povuče

35/43

SQL: DCL

• Davanje dozvola se vrši GRANT naredbom, a

povlačenje REVOKE naredbom

• U sistemu DB2 Sistemski administrator (SYSADM nivo

autorizacije) je inicijalni vlasnik svih dozvola

36/43

SQL: DCL

• Davanje dozvola se vrši GRANT naredbom, a

povlačenje REVOKE naredbom

• U sistemu DB2 Sistemski administrator (SYSADM nivo

autorizacije) je inicijalni vlasnik svih dozvola

37/42

SQL: DCL – GRANT naredba

• Sintaksa za dozvole nad tabelama ili pogledima

• GRANT dozvola [ON [tip] objekat] TO korisnik;

• dozvola je lista jedne ili više vrsta dozvola ili fraza ALL

PRIVILEGES ili ALL

• korisnik je lista korisnika ili PUBLIC (svi korisnici)

• objekat je lista imena jednog ili više objekata (koji su svi

istog tipa)

• tip označava tip objekta - ako se izostavi podrazumeva se

TABLE

38/43

SQL: DCL – GRANT naredba

• Dozvole koje se odnose na osnovne tabele i poglede

• CONTROL (sve privilegije sa pravom prenosa, osim

CONTROL)

• DELETE

• INSERT

• SELECT (pretraga i kreiranje pogleda)

• UPDATE (mogu da se navedu pojedinačne kolone)

39/43

SQL: DCL – GRANT naredba

• Dozvole koje se odnose samo na osnovne tabele

• ALTER (dozvola za izvršavanje ALTER TABLE nad

tabelom)

• INDEX (dozvola za izvršavanje CREATE INDEX nad

tabelom)

• REFERENCES (dozvola za formiranje/brisanje stranog

ključa koji se odnosi na tu tabelu kao odnosnu tabelu)

40/43

SQL: DCL – GRANT naredba

• Primeri dozvola za operacije nad tabelama

• GRANT SELECT ON TABLE K TO KORISNIK01;

• GRANT SELECT, UPDATE (STATUS, DRZAVA) ON TABLE

I TO KORISNIK02, KORISNIK03, KORISNIK09;

• GRANT ALL PRIVILEGES ON TABLE P, I, K TO

KORISNIK76, KORISNIK77;

• GRANT SELECT ON TABLE KP TO PUBLIC;

• GRANT DELETE ON KP TO KORISNIK99;

41/43

SQL: DCL – GRANT naredba

• GRANT naredba - WITH GRANT OPTION

• Ako korisnik želi da prenese dozvolu drugom korisniku, sa

pravom daljeg prenošenja te dozvole

• GRANT dozvola .... WITH GRANT OPTION

• Primer

• Korisnik K1: GRANT SELECT ON TABLE P TO K2 WITH

GRANT OPTION;

• Korisnik K2: GRANT SELECT ON TABLE P TO K3 WITH

GRANT OPTION;

• Korisnik K3: GRANT SELECT ON TABLE P TO K4 WITH

GRANT OPTION;

• .........

42/43

SQL: DCL – REVOKE naredba

• Oduzimanje prava

• Sintaksa za dozvole nad tabelama ili pogledima

• REVOKE dozvola [ON [tip] objekat] FROM korisnik [BY

ALL];

• REVOKE SELECT ON TABLE P FROM K2;

• povlačenje dozvole za korisnike K3, K4, ....

43/43