Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) 41/1 B IT v: 2017.10.30 MAN
DDL Adatstruktúra definiáló utasítások DDL Data Definition Language Adatszerkezetek (elsősorban táblák) létrehozása, módosítása, törlése Egy tábla szerkezete, sémája a táblához tartozó mezőkkel egyértelműen megadható A mezők megadása a mező nevének és a mező adattípusának, valamint az integritási feltételeknek a kijelölésével történik Több tábla is létezhet ugyanazzal a szerkezettel, de a nevük nem lehet egyforma 41/2
Tábla (vagy más objektum) létrehozása CREATE objektumtípus objektumnév paraméterek; CREATE TABLE táblanév ( mezőnév adattípus [integritási feltétel], mezőnév adattípus [integritási feltétel], mezőnév adattípus [integritási feltétel] [,további integritási feltételek] ); CREATE TABLE Autó ( Rendszám char(7) PRIMARY KEY, Típus char(25) NOT NULL, Szín char(15) DEFAULT 'Fehér', Kor number(3) CHECK (Kor >= 0) ); 41/3 Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 AKT-392 Trabant Kék 32
Tábla (vagy más objektum) létrehozása Kód 1 2 3 Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék CREATE SEQUENCE k_s; insert into Autó values (k_s.nextval, CREATE INDEX RIndex ON Autó (Rendszám); Rendszám AKT-392 GBC-765 JED-123 Kód 3 1 2 CREATE VIEW OpelAutó AS Select Kód, Rendszám, Szín FROM Autó Where Tipus='Opel'; Kód 1 Rendszám GBC-765 Szín Fehér 41/4
Adattípusok Alap adattípusok: Char(n) fixen n hosszúságú karaktersorozat, Hossza max. 2000 karakter A rövidebb szövegek végére szóközök kerülnek Number(n,m) n jegyű decimális szám, ebből m tizedes jegy; Number(8,2) 12345.12 Max. 38 számjegyből állhat Date dátum. 41/5
Oracle adattípusok Szöveges adattípusok CHAR (1-2000), fix hosszúságú adatok NCHAR (1-2000) Unicode kódolással VARCHAR (1-4000) változó hosszúságú adatok (null üres karakterlánc) VARCHAR2 (1-4000) Unicode kódolással (null = üres karakterlánc) LONG (max. 2 GB) CLOB (max. 4 GDb-1 adathoz) 41/6 NCLOB (max. 4 GDb-1 adathoz, Unicode kódolással)
Oracle adattípusok Numerikus adattípusok NUMBER (±10 125 ) Max. 38 számjegy INT (INTEGER) (±2 31 ) SMALLINT (±2 15 ) DECIMAL (±10 308 ) Max. 15 számjegy 41/7
Oracle adattípusok Dátum és időpont adattípusok DATE (ie. 4712.01.01 isz. 9999.12.31) TIMESTAMP (másodperc pontossággal) 41/8
Integritási feltételek megadása Primary key elsődleges kulcs References hivatkozás másik táblára Foreign key (mezőlista) References táblanév(mezőlista) idegen kulcs megadása ha a kulcs több mezőből áll Not null nem maradhat üresen a mező, kötelező kitölteni Unique a mező egyedi, nem kerülhet bele két egyforma érték Default alapérték megadása Check értékellenőrzés 41/9
Adattáblák létrehozása Megszorítások Create table Melós( IDM int, IDM int Primary key, Check (IDM > 1000), IDM int Default '29', Unique (IDM), Index (IDM), Foreign key (IDM) references Munkakör(Mkód), ); 41/10
Példák Oracle! create table pld1 ( id int primary key, nev varchar(100), datum date, suly float(8) ); create table pld2 ( az int primary key, hely varchar2(100), darab int check (darab>=0), foreign key (az) references pld1(id) ); create sequence id_seq; create table pld3 ( id int default id_seq.nextval primary key, nev varchar2(50) not null, darab number(10) default '0' not null, idopont timestamp default sysdate, unique (nev) ); 41/11 Fontos a sorrend!
Tábla módosítása, átnevezése ALTER TABLE táblanév [ADD (újelem,..., újelem)] [MODIFY (módosítás,..., módosítás)] [DROP (oszlop,..., oszlop)] [RENAME COLUMN régi_név TO új_név] újelem: egy "oszlopnév adattípus [feltétel]" csoport módosítás: "oszlopnév adattípus [feltétel]" ALTER TABLE Autó ADD Tulaj varchar(35); Fontos: a mezők mérete általában csak növelhető! RENAME táblanév TO újtáblanév 41/12 Tábla átnevezése
Tábla módosítása create table személy( id number(4), név varchar(30) ); ALTER TABLE személy ADD szülév number(4); ALTER TABLE személy RENAME COLUMN szülév TO szüldátum; ALTER TABLE személy MODIFY szüldátum date; ALTER TABLE személy MODIFY id primary key; DESC személy; ALTER TABLE személy DROP primary key; ALTER TABLE személy DROP COLUMN szüldátum; RENAME személy TO person; 41/13
Tábla módosítása comment on column person.id is '100 és 300 közötti adatok'; ALTER TABLE person MODIFY név default 'Kis Béla'; ALTER TABLE person MODIFY NÉV DEFAULT NULL; 41/14
Tábla módosítása: megszorítások Javaslat ALTER TABLE person ADD CONSTRAINT cn1 PRIMARY KEY(id); ALTER TABLE person ADD CONSTRAINT cn2 UNIQUE (név) ALTER TABLE person ADD CONSTRAINT cn3 CHECK (id > 200) create table department( dpno int, dpname varchar(30) ); ALTER TABLE department ADD CONSTRAINT cn4 primary key(dpno); ALTER TABLE person ADD dp int; ALTER TABLE person ADD CONSTRAINT cn5 FOREIGN KEY (dp) REFERENCES department(dpno); ALTER TABLE person DROP CONSTRAINT cn1; 41/15
Megszorítások listázása SELECT * FROM user_constraints WHERE table_name = 'PERSON' 41/16 C check constraint on a table P primary key U unique key R referential integrity V with check option, on a view O with read only, on a view Csupa nagybetű!
Tábla törlése DROP TABLE táblanév; Azok a táblák amelyekre más tábla hivatkozik, nem törölhetők! DROP TABLE Autó; 41/17
Vedd észre! Táblák létrehozási sorrendje 1. Először azokat a táblákat kell létrehozni, amelyekből nem hivatkozunk más táblákra 2. Azután azokat, amelyekből hivatkozunk más táblákra 1 Kategoria Termek 2 Kkod Nev Kategoria Tkod Nev Ar Leiras Vasarlas Tkod Sorszam Idopont Darab VID 5 4 Vasarlo VID Nev Cim Fizmod FizModok Fkod Leiras 3 41/18
Vedd észre! Táblák törlési sorrendje 1. Először azokat a táblákat lehet törölni, amelyekből hivatkozunk más táblákra 2. Azután azokat, amelyekből nem hivatkozunk más táblákra 5 Kategoria Termek 4 Kkod Nev Kategoria Tkod Nev Ar Leiras Vasarlas Tkod Sorszam Idopont Darab VID 1 2 Vasarlo VID Nev Cim Fizmod FizModok Fkod Leiras 3 41/19
Lehetőségek Tábla létrehozása másolással (új táblanévvel) CREATE TABLE Személyek AS SELECT * FROM Person; Person ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Személyek ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Üres tábla létrehozása másolással Create table Személyek as select * from Person WHERE 1=0; Person ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Személyek ID Név Dp 41/20
Lehetőségek Üres tábla létrehozása másolással, eltérő szerkezettel CREATE TABLE Személyek AS SELECT id, név FROM Person WHERE 1=0; Person ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Személyek ID Név 41/21
Lehetőségek Tábla létrehozása több táblából create table Személyek as select ID, Név as NAME, DPNAME from Person join Department on dp=dpno Person ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Department DpNo 10 11 DpName Designer Programmer 41/22 Személyek ID Name DpName 1 2 3 Kis Béla Kő Dezső Hó Jenő Designer Programmer Designer
Nyomkövetési feladat 41/23
Órai feladat (1) Kövesd a parancsokat! CREATE TABLE dolgozo ( nev VARCHAR2(40), kor NUMBER, munkakor VARCHAR2(60) ); ALTER TABLE dolgozo ADD szuletesiev NUMBER(4) NOT NULL; ALTER TABLE dolgozo DROP COLUMN kor; ALTER TABLE dolgozo ADD szemelyiszam NUMBER(13); ALTER TABLE dolgozo MODIFY szemelyiszam PRIMARY KEY; 41/24
Órai feladat (2) ALTER TABLE dolgozo DROP PRIMARY KEY; ALTER TABLE dolgozo ADD id NUMBER(4) PRIMARY KEY; ALTER TABLE dolgozo RENAME COLUMN munkakor TO mkor; ALTER TABLE dolgozo RENAME COLUMN szuletesiev To szulido; ALTER TABLE dolgozo RENAME COLUMN szemelyiszam TO szemsz; ALTER TABLE dolgozo MODIFY szulido date; ALTER TABLE dolgozo MODIFY szemsz char(13); Add meg azt a CREATE parancsot, amivel a fenti parancsok hatására kialakult táblaszerkezetet létre lehet hozni! dolgozo id nev N(4) vc(40) mkor vc(60) szulido D szemsz c(13) 41/25
Órai feladat (2.5) Add meg azt a CREATE parancsot, amivel a fenti parancsok hatására kialakult táblaszerkezetet létre lehet hozni! dolgozo id nev N(4) vc(40) mkor vc(60) szulido D szemsz c(13) create table dolgozo( id number(4), nev varchar2(40), mkor varchar2(60), szulido date, szemsz char(13) ); 41/26
Órai feladat (3) Kövesd tovább a parancsokat! CREATE TABLE telefonszam ( id NUMBER(4) NOT NULL, mobil char(9) UNIQUE ); ALTER TABLE telefonszam ADD FOREIGN KEY (id) REFERENCES dolgozo(id); telefonszam id mobil N(4) c(9) 41/27
Órai feladat (4) Kövesd tovább a parancsokat! CREATE TABLE fonok ( fonokid NUMBER(4), idkinek NUMBER(4), PRIMARY KEY (fonokid, idkinek), CONSTRAINT c1 FOREIGN KEY (fonokid) REFERENCES dolgozo(id), CONSTRAINT c2 FOREIGN KEY (idkinek) REFERENCES dolgozo(id) ); fonok fonokid N(4) idkinek N(4) Rajzold meg mindhárom tábla relációs modelljét a köztük lévő kapcsolatokkal együtt! 41/28
Órai feladat (4.5) Rajzold meg mindhárom tábla relációs modelljét a köztük lévő kapcsolatokkal együtt! dolgozo id nev N(4) vc(40) mkor vc(60) szulido D szemsz c(13) telefonszam id mobil N(4) c(9) fonok fonokid N(4) idkinek N(4) 41/29
Egyéni feladat B 41/30 IT MAN
Egyéni feladat (1) Készítsen egy táblát: Neve legyen Melós, Legyen benne MID numerikus mező, max. 4 számjeggyel, Legyen benne Név mező, 30 karakterrel. Készítse el a következő módosításokat: MID legyen elsődleges kulcs Szúrjon be egy Születés nevű, dátum típusú mezőt A Név alapértéke legyen Kiss Robi A Születés ne lehessen üres A Születés alapértéke legyen 1990.01.01 41/31
Egyéni feladat (1) Melos tábla elkészítése create table melos( mid number(4), nev varchar2(30) ); MID legyen elsődleges kulcs alter table melos modify mid primary key Szúrjon be egy Születés nevű, dátum típusú mezőt alter table melos add szuletes date A Név alapértéke legyen Kiss Robi alter table melos modify (nev default 'Kiss Robi') 41/32
Egyéni feladat (1) A Születés ne lehessen üres alter table melos add constraint szul_nn check (szuletes is not null); A Születés alapértéke legyen 1990.01.01 select sysdate from dual -> 10/30/2018 alter table melos modify (szuletes default '01/01/1990') 41/33
Egyéni feladat (2) Készítsen egy másik táblát: Neve legyen Munkakör Legyen MAZ nevű, numerikus mezője, max. 4 számjeggyel Legyen MkNév nevű mezője, max. 30 karakter Készítse el a következő módosításokat: MAZ legyen elsődleges kulcs MkNév ne lehessen üres Szúrjon be egy Kereset nevű numerikus mezőt (7 számjegy!) Szúrjon be egy ellenőrzést, a Kereset ne lehessen 200-nál kevesebb! 41/34
Egyéni feladat (2) Munkakör tábla elkészítése create table munkakor( maz number(4), mknev varchar2(30) ); MAZ legyen elsődleges kulcs alter table munkakor modify maz primary key MkNév ne lehessen üres alter table munkakor add constraint mknev_nn check (mknev is not null); 41/35
Egyéni feladat (2) Szúrjon be egy Kereset nevű numerikus mezőt (7 számjegy!) alter table munkakor add kereset number(7) Szúrjon be egy ellenőrzést, a Kereset ne lehessen 200-nál kevesebb! alter table munkakor add constraint ker_ch check (kereset > 200); 41/36
Egyéni feladat (3) Készítse el a következő módosításokat: Szúrjon be egy Mkör nevű numerikus mezőt a Melós táblába, (4 számjegy) Az Mkör mezőből készítsen idegen kulcsmezőt, mely a Munkakör táblával tartja a kapcsolatot! Írassa ki a táblák szerkezetét, ellenőrizze a megoldást! Törölje le a két táblát! 41/37
Egyéni feladat (3) Szúrjon be egy Mkör nevű numerikus mezőt a Melós táblába, (4 számjegy) alter table melos add mkor number(4) Az Mkör mezőből készítsen idegen kulcsmezőt, mely a Munkakör táblával tartja a kapcsolatot! alter table melos add constraint melos_fk foreign key (mkor) references munkakor(maz) Írassa ki a táblák szerkezetét desc melos; desc munkakor; Írassa ki az összes megszorítást, megkötést select * from all_constraints where table_name='melos' 41/38
Egyéni feladat (3) Törölje le a két táblát drop table melos drop table munkakor 41/39
Csá! 41/40
VÉGE VÉGE 41/41