Anda di halaman 1dari 35

Adatbzisok I.

1. elads
Pap-Szigeti Rbert
pap-szigeti.robert@gamf.kefo.hu

A tantrgyrl

5 kredit, ktelez
2 ra elads + 2 ra labor
Elads ZH (adatmodellezs, normalizls,
SQL, relcialgebra) 50 pontrt.
Kt gyakorlati feladatsor a laboron 25-25
pontrt
Jegymegajnls: 35 + 35 ponttl
rsbeli s szbeli vizsga
CooSpace: https://coospace.kefo.hu

Az SQL nyelv

Structured Query Language strukturlt


lekrdez nyelv

1976: SEQUEL (Structured English QUEry


Language) az SQL eredeti vltozata, IBMnl fejlesztettk ki
1981: ORACLE 2 (SQL alap RDBMS,
nagygpre)
1983: IBM: DB2 (SQL alap RDBMS,
nagygpre)

Az SQL nyelv
1986: szabvny SQL, az ANSI definilta ANSI 86 (SQL86 majd SQL89)
1992: SQL2 szabvny
Tovbbfejleszts: SQL3 (rekurzi,
triggerek, objektum-relcis modell)
A jelenlegi SQL-implementcik ltalban
az SQL2-nl jval tbbet tudnak,
ugyanakkor az SQL2 bizonyos rszleteit
nem tartalmazzk (Oracle, dBase IV stb.)

Az SQL nyelv jellemzi


Halmazorientlt nyelv
Kisbet s nagybet a nyelv alapszavaiban
egyenrtk
Utastsok sorfolytonosan rhatk, lezrs
pontosvesszvel
Vltoz nincs, csak tbla- s
oszlopnevekre lehet hivatkozni
Kifejezsben hivatkozs egy tbla adott
oszlopra: tbla.oszlop

Az SQL nyelv jellemzi


Szvegkonstans: 'szveg'
Stringek konkatencija: + illetve ||
Dtum: konvertl fggvnnyel:DATE
'1968-05-12 vagy CTOD(1968/05/12)
Bizonyos nyelveken specilis karakterrel
(pl. Access #1992.10.12#)
Id: TIME '15:31:02.5' (ra, perc,
msodperc) vagy specilis karakterrel (pl.
Access #10:30:03#)

Az SQL nyelv jellemzi


Mveletek: +, , *, /, and, or, not
Relcis jelek: =, <>, >, <, >=, <=
Specilis relcikat kifejez szavak:

between (r between 1000 and 2000)


like (nv like 'T*' vagy nv like 'T%')
any (r < any(2000, 3000, 4000))
in (vros in ('Szeged', 'Kecskemt', 'Baja'))
is null (telefon is null)
exists (exists lekrdezs)

BETWEEN

x between kif1 and kif2

igaz, ha kif1 <= x <= kif2


az rtkek numerikusak vagy dtum tpusak
lehetnek (nhny implementciban stringek
is)
not-tal tagadhat
pl. dtum not between '2009.01.01' and
'2009.12.31' - a dtum nem 2009. vi

IS NULL

x is null

igaz, ha az x mez rtke null (res a mez)

az "x IS NULL" kifejezs nem egyenrtk az "x =


NULL" kifejezssel, ugyanis az utbbi rtke az
ISMERETLEN logikai rtk

not-tal tagadhat
pl. telefon is not null - az telefon mez nem
res

ANY

x relci ANY (rtklista)

igaz, ha az x mez rtke a megadott


relciban ll az rtklista valamelyik elemvel

pl. vros = ANY ('Szeged','Szolnok','Pcs')

pl. r > ANY (lek1, lek2, lek3) - a


lekrdezsek eredmnyeinek valamelyiknl
nagyobb az r

LIKE

x like maszk-kifejezs

igaz, ha az x karaktersorozat megfelel a megadott


mintnak
Ha a mintban "%" illetve "_" jel szerepel, az
tetszleges karaktersorozatot illetve tetszleges
karaktert jelent (SQL89: * s ?)

not-tal tagadhat
pl. nv LIKE '%pter%' - igaz minden olyan
nvre, amelyikben a Pter karaktersorozat
szerepel (pl. Kispter Tibor esetn is)

Az SQL utastsok csoportjai

DDL (Data Definition Language)


adatdefincis utastsok

CREATE objektum ltrehozsa


ALTER objektum mdostsa
DROP objektum eldobsa

Az SQL utastsok csoportjai

DML (Data Manipulation Language)


adatmanipull utastsok

INSERT rekord felvtele


UPDATE rekord(ok) mdostsa
DELETE rekord(ok) trlse

Az SQL utastsok csoportjai

DQL (Data Query Language)


adatlekrdez utastsok

SELECT adatok lekrdezse

DCL (Data Control Language)


vezrl utastsok

GRANT jogosultsgok kezelse


COMMIT, ROLLBACK tranzakcik kezelse

Adatbzis ltrehozsa,
eldobsa
Csak megfelel jogosultsggal
Nem minden krnyezetben
CREATE DATABASE uzlet;
DROP DATABASE uzlet;

DDL tblk definilsa


CREATE objektumtpus nv paramterek;
CREATE TABLE tblanv (
meznv1 tpus1 [megszorts1],
meznv2 tpus2 [megszorts2],
primary key

not null
[tblamegszortsok] )

char (n)
number (n, m)
date

primary key(m1, m2)


foreign key(m3, m4)
references tbla
check felttel

unique
check felttel
references

Adattpusok

Rendszerenknt eltrk lehetnek

char(n)
varchar(n)
integer
real
decimal(n[,d])
date, time
logical

n hosszsg string
legfeljebb n hosszsg string
egsz szm (rviden int)
lebegpontos szm
n jegy szm, ebbl d tizedesjegy
dtum, id (nhol datetime is)
logikai (boolean)

"DEFAULT rtk" megadsval alaprtelmezett


rtk definilhat. Ha ilyet nem adunk meg, az
alaprtelmezett rtk NULL (nhol int esetn 0).

Mezfelttelek

Csak az adott mezre vonatkoznak:

primary key elsdleges kulcs


unique
egyedi rtk (kulcs)
references tbla(oszlop) [ON felttelek]
idegen kulcs

CREATE TABLE Dolgoz


(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd));

Tblafelttelek

A teljes tblra (vagy mezlistra)


vonatkoznak:

primary key (oszloplista)


elsdleges kulcs
unique (oszloplista)
egyedi rtk
foreign key (oszloplista)
references tbla(oszlop) [ON felttelek]
idegen kulcs

Fontos tudnivalk

Ha a (kls) kulcs tbb oszlopbl ll, akkor csak


tblafelttel formjban adhat meg
Idegen kulccsal csak a msik tbla elsdleges
kulcsra lehet hivatkozni
A PRIMARY KEY (elsdleges kulcs) s UNIQUE
(kulcs) kztti klnbsg:
Egy smban csak egy elsdleges kulcs, de
tetszleges szm tovbbi kulcs lehet
A DBMS-ek az elsdleges kulcshoz ltalban
automatikusan indexet hoznak ltre

Plda
OSZTLY(osztlykd, osztlynv, vezAdszm)
DOLGOZ (adszm, nv, lakcm, osztlykd)
CREATE TABLE Osztly
(osztlykd
CHAR(3) PRIMARY KEY,
osztlynv
CHAR(20),
vezAdszm
DECIMAL(10));
CREATE TABLE Dolgoz
(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd));

Plda folytatsa

A DOLGOZ smt gy is lehetne


definilni:

CREATE TABLE Dolgoz


(adszm
DECIMAL(10),
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3),
PRIMARY KEY (adszm),
FOREIGN KEY (osztlykd) REFERENCES
Osztly(osztlykd));

MySQL-ben

az idegen kulcsot mindig


tblafelttelknt kell megadni (InnoDB)

Ellenrzs a kulcsok alapjn


A tbla mdostsakor a definilt
kulcsfelttelek automatikusan ellenrzsre
kerlnek
PRIMARY KEY s UNIQUE esetn ez azt
jelenti, hogy a rendszer nem enged olyan
mdostst illetve j sor felvtelt, amely
egy mr meglv kulccsal tkzne

ON-felttelek
REFERENCES (kls kulcs hivatkozs)
esetn ON-felttelek megadsval
szablyozhatjuk a rendszer viselkedst
T a hivatkoz s S a hivatkozott tbla:

Alaprtelmezs (ha nincs ON-felttel):

T-ben nem megengedett olyan beszrs s


mdosts, amely S-ben nem ltez kulcs rtkre
hivatkozna,
tovbb S-ben nem megengedett olyan kulcs
mdostsa vagy sor trlse, amelyre T hivatkozik

Plda
OSZTLY(osztlykd, osztlynv, vezAdszm)
DOLGOZ (adszm, nv, lakcm, osztlykd)
CREATE TABLE Osztly
(osztlykd
CHAR(3) PRIMARY KEY,
osztlynv
CHAR(20),
vezAdszm
DECIMAL(10));
CREATE TABLE Dolgoz
(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd));

Plda
OSZTLY(osztlykd, osztlynv, vezAdszm)
DOLGOZ (adszm, nv, lakcm, osztlykd)
CREATE TABLE Osztly
(osztlykd
CHAR(3) PRIMARY KEY,
osztlynv
CHAR(20),
vezAdszm
DECIMAL(10));
CREATE TABLE Dolgoz
(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd) ON UPDATE CASCADE);

Plda
OSZTLY(osztlykd, osztlynv, vezAdszm)
DOLGOZ (adszm, nv, lakcm, osztlykd)
CREATE TABLE Osztly
(osztlykd
CHAR(3) PRIMARY KEY,
osztlynv
CHAR(20),
vezAdszm
DECIMAL(10));
CREATE TABLE Dolgoz
(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd) ON DELETE CASCADE);

Plda
OSZTLY(osztlykd, osztlynv, vezAdszm)
DOLGOZ (adszm, nv, lakcm, osztlykd)
CREATE TABLE Osztly
(osztlykd
CHAR(3) PRIMARY KEY,
osztlynv
CHAR(20),
vezAdszm
DECIMAL(10));
CREATE TABLE Dolgoz
(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd) ON UPDATE SET NULL);

Plda
OSZTLY(osztlykd, osztlynv, vezAdszm)
DOLGOZ (adszm, nv, lakcm, osztlykd)
CREATE TABLE Osztly
(osztlykd
CHAR(3) PRIMARY KEY,
osztlynv
CHAR(20),
vezAdszm
DECIMAL(10));
CREATE TABLE Dolgoz
(adszm
DECIMAL(10) PRIMARY KEY,
nv
CHAR(30),
lakcm
CHAR(40) DEFAULT 'ismeretlen',
osztlykd CHAR(3) REFERENCES
Osztly(osztlykd) ON DELETE SET NULL);

ON-felttelek

ON UPDATE CASCADE

ha S egy sorban vltozik a kulcs rtke, akkor a


r val T-beli hivatkozsok is megfelelen
mdosulnak (mdosts tovbbgyrzse)

ON DELETE CASCADE

ha S-ben trlnk egy sort, akkor T-ben is trldnek


a r hivatkoz sorok (trls tovbbgyrzse)

ON-felttelek

ON UPDATE SET NULL

ha S egy sorban vltozik a kulcs rtke, akkor Tben a r val kls kulcs hivatkozsok rtke
NULL lesz

ON DELETE SET NULL

ha S-ben trlnk egy sort, akkor T-ben a r val


kls kulcs hivatkozsok rtke NULL lesz

Objektum trlse
DROP objektumtpus azonost param;
Pl. tbla eldobsa:

DROP TABLE dolgozok;

Objektum mdostsa
ALTER objektumtpus azonost param;
Tbla mdostsa:

ALTER TABLE tblanv


[ADD (jelem, ..., jelem)]
[MODIFY (mdosts, ..., mdosts)]
[DROP (oszlop, ..., oszlop)];
Pldul:
ALTER TABLE Dolgoz ADD (szldtum DATE);
ALTER TABLE Dolgoz MODIFY (cm VARCHAR(60));
ALTER TABLE Osztly MODIFY (vezAdszm
VARCHAR(10) REFERENCES Dolgoz(adszm)); ?

Plda
TELEPULESEK (irszam, telepulesnev)
UGYFELEK (az, nev, irszam, utca_haz)
CREATE TABLE Telepulesek
(irszam
CHAR(4) PRIMARY KEY,
telepulesnev CHAR(40));
CREATE TABLE Ugyfelek
(az
INT PRIMARY KEY auto_increment,
nev
CHAR(30) NOT NULL,
irszam
CHAR(4) REFERENCES
Telepulesek(irszam) ON DELETE CASCADE,
utca_haz CHAR(40));

Folytats
a kvetkez eladson

Anda mungkin juga menyukai