Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
SQL – DDL
� CREATE
� ALTER
� DROP� Schema
� Table
� Tablespace
� Index
� View
� Domain
� Constraint
� ...
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 } ]
SQL DDL: DROP SCHEMA
� DROP SCHEMA ime-sheme RESTRICT
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]
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 FLOAT (1<=p<=24), DOUBLE (25<=p<=53)
CHAR(m)
CHAR VARCHAR TEXT BLOB
DATE TIME
Itd.
SQL DDL: CREATE TABLE
definicija primarnog ključa
� [NOT NULL [[WITH] DEFAULT
[vrednost]]]
� PRK:
[CONSTRAINT ime] PRIMARY KEY
(ime-kolone {, ime-kolone})
� NOT NULL kolone
SQL DDL: CREATE TABLE
definicija stranog ključa
� STK:
[CONSTRAINT ime] FOREIGN KEY (
kolona {, kolona})
REFERENCES odnosna-tabela
[ON DELETE efekat]
[ON UPDATE efekat]
SQL DDL: ON DELETE efekat
� NO ACTION (podrazumevano, posle svih)
� RESTRICT(pre svih)
� SET NULL
� CASCADE
SQL DDL: ON UPDATE efekat
� NO ACTION (podrazumevano dejstvo)
� RESTRICT
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')
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))
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))
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)
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
DROP TABLE
� DROP TABLE bazna-tabela
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
CREATE, DROP VIEW
� CREATE VIEW ime-pogleda [( kolona {, kolona})]
AS puni upitni blok
[WITH CHECK OPTION]
� Primer: � CREATE VIEW JUGIZD
AS SELECT I SIF, NAZIV
FROM I
WHERE DRZAVA='Jugoslavija'
� DROP VIEW ime-pogleda
� Primer: DROP VIEW JUGIZD
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
SQL – DDL: CREATE DOMAIN
� tip-podataka - skalarni tip, i:
BIT [VARYING] (n)
INTERVAL
DATE
TIME
TIMESTAMP.
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')
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
CREATE TABLE: atributi nad
domenima, ON UPDATE efekatCREATE 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 ))
ALTER, DROP TABLE: izmena,
uklanjanje
ALTER TABLE
DROP TABLE [RESTRICT | CASCADE] – pogled,
uslov ograničenja
Opšti uslov integriteta
� 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, KI
WHERE I.STATUS < 20 AND
I.I_SIF = KI.I_SIF AND KI.TIRAZ > 5000))
CREATE SCHEMA
� CREATE SCHEMA ime-sheme
<autorizacija>
<karakterski skup> /*default karakterskog skupa sheme*/
<opis svake komponente sheme>
[ definicija-domena | definicija-tabele |
definicija-pogleda |
definicija-uslova-ogranicenja
{, definicija-domena}, {, definicija-tabele}
{, definicija-pogleda},
{, definicija-uslova-ogranicenja}
]
DROP SCHEMA
� DROP SCHEMA ime-sheme
[RESTRICT | CASCADE]
SQL DML: unošenje
INSERT INTO ime-tabele …
1. Unošenje pojedinačne vrste
2. Unošenje bloka
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
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
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
SQL: unošenje bloka - rezultat
SELECT *
FROM IP_DRZAVA
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, I, KP, KI
WHERE P.P SIF=KP.P SIF AND KP.K SIF=KI.K SIF
AND KI.I SIF=I.I SIF)
SELECT NAZIV
FROM PI
WHERE IME='B.Copic'
SQL: ažuriranje
� UPDATE ime-tabele [ ime n-torne promenljive]
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
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 = 'Jugoslavija')
SQL: brisanje
� DELETE FROM ime-tabele [ ime n-tornepromenljive]
[ WHERE logicki-izraz ]
� Na primer
DELETE FROM KI
WHERE I_SIF = ‘i4’
� Referencijalni integritet, na primer:
� DELETE FROM I
WHERE I_SIF='i3'
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)
DODATAK:
CHARACTER -tipovi podataka
� Više kategorija karakterskih skupova
� Zavise od standarda, sistema / implementacije� Ulazni (entry) nivo ANSI SQL: skup karaktera za tip
CHARACTER definisan je implementacijom� minimum: ASCII podskup od 95 grafičkih karaktera
� Ulazni i srednji (entry, intermediate) nivo saglasnostisa FIPS (Federal Information Processing Standards)SQL zahteva podršku tipovima:
� SQL_CHARACTER: 83 ASCII karaktera - najuniverzalniji skupkarakra
� ASCII_GRAPHIC: 95 grafičkih ASCII karaktera� LATIN1: 191 grafički karakter standarda ISO 8859-1
Tipovi podataka
� ASCII_FULL: svih 256 8-bitnog ASCII, ANSI/ISO 8859-1, uključujući kontrolne karaktere
� SQL_TEXT: SQL_CHARACTER i drugi skupovi karakterapodržani implementacijom
� Npr, u FIPS:
� CREATE SCHEMA INFO_SCHEM
AUTHORIZATION "_SYSTEM"
DEFAULT CHARACTER SET SQL_TEXT
SQL 92
� Sql92: 3 kategorije karakterskih skupova
� Nacionalni ili internacionalni standardi: uINFORMATION_SCHEMA,
� Obezbeđeni implementacijom: uINFORMATION_SCHEMA
� Definisani aplikacijom: u bilo kojoj shemi koju aplikacija izabere
� SQL_TEXT: uključuje sve SQL karaktere u
svim karakterskim skupovima
SQL 92 tipovi podataka
� <data type> ::=
<character string type> [ CHARACTER SET <character set specification> ]
| <national character string type>| <bit string type>| <numeric type>
| <datetime type>
| <interval type>� <character string type> ::=
CHARACTER [ <left paren> <length> <right paren> ]| CHAR [ <left paren> <length> <right paren> ]
| CHARACTER VARYING <left paren> <length> <right paren>| CHAR VARYING <left paren> <length> <right paren>
| VARCHAR <left paren> <length> <right paren>
� (Implicitni <character set specification> definisan implementacijom)
SQL 92 tipovi podataka (nast.)
� <national character string type> ::=
NATIONAL CHARACTER [ ( <length> ) ]
| NATIONAL CHAR [ ( <length> ) ]
| NCHAR [ ( <length> ) ]
| NATIONAL CHARACTER VARYING ( <length> )
| NATIONAL CHAR VARYING ( <length> )
| NCHAR VARYING ( <length> )
Isto što i CHARACTER / CHAR /(length) CHARACTER SET predefinisani_skup
MySQL: karakterski skupovi
� Karakterski skupovi za:� server,
� bazu podataka,
� tabelu,
� konekciju
� Default server character set: ISO-8859-1 (Latin1)� Promena: --default-character-set=character_set_name
� Baza podataka: � CREATE DATABASE db_name [DEFAULT
CHARACTER SET character_set_name [COLLATE collation_name]]
� ALTER DATABASE db_name [DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]]
MySQL: karakterski skupovi
� Tabela: � CREATE TABLE table_name ( column_list ) [DEFAULT
CHARACTER SET character_set_name [COLLATE collation_name]]
� ALTER TABLE table_name [DEFAULT CHARACTER SET character_set_name] [COLLATE collation_name]
� Kolona:� column_name {CHAR | VARCHAR | TEXT}
(column_length) [CHARACTER SET character_set_name[COLLATE collation_name]]
� Na primer,� CREATE TABLE t1 ( c1 CHAR(10) CHARACTER SET
latin1 ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
MySQL: karakterski skupovi
� Od 4.1: podrška Unicode kroz utf8 i ucs2
skupove karaktera
� Primer (ekvivalentne deklaracije):
� CHAR(10) CHARACTER SET utf8
� NATIONAL CHARACTER(10)
� NCHAR(10)
� (utf8 je predefinisani skup za NCHAR)
mysql> SHOW CHARACTER SET;� +----------+-----------------------------+---------------------+--------+
� | Charset | Description | Default collation | Maxlen |
� +----------+-----------------------------+---------------------+--------+
� | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
� | dec8 | DEC West European | dec8_swedish_ci | 1 |
� | cp850 | DOS West European | cp850_general_ci | 1 |
� | hp8 | HP West European | hp8_english_ci | 1 |
� | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
� | latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 |
� | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
� | swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
� | ascii | US ASCII | ascii_general_ci | 1 |
� | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
� | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
� | cp1251 | Windows Cyrillic | cp1251_bulgarian_ci | 1 |
� | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
� | tis620 | TIS620 Thai | tis620_thai_ci | 1 |
� | euckr | EUC-KR Korean | euckr_korean_ci | 2 |
� | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
� | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
� | greek | ISO 8859-7 Greek | greek_general_ci | 1 |
� | cp1250 | Windows Central European | cp1250_general_ci | 1 |
� | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
� | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
� | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
� | utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
� | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
� | cp866 | DOS Russian | cp866_general_ci | 1 |
� | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
� | macce | Mac Central European | macce_general_ci | 1 |
� | macroman | Mac West European | macroman_general_ci | 1 |
� | cp852 | DOS Central European | cp852_general_ci | 1 |
� | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
� | cp1256 | Windows Arabic | cp1256_general_ci | 1 |
� | cp1257 | Windows Baltic | cp1257_general_ci | 1 |
� | binary | Binary pseudo charset | binary | 1 |
� +----------+-----------------------------+---------------------+--------+