8. gyakorlat
Structured Query Language
• Struktúrált lekérdező nyelv A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai
• DDL (Data Definition Language) – adatstruktúra
definiáló utasítások • DML (Data Manipulation Language) – adatokon műveletet végző utasítások
Kisbetűk és nagybetűk egyenértékűek a nyelv
alapszavaiban Utasítások sorfolytonosan írhatók, az utasítás végét ; jelzi Változók nincsenek, csak tábla- és oszlopnevekre lehet hivatkozni • Pl. tábla.oszlop (ha a tábla egyértelmű, akkor elhagyható) Alias név: név AS újnév (nem mindenhol
kötelező) Szövegkonstansok: ‘ jelek között ’ Relációjelek, logikai műveletek -> lásd. előadás
Adatbázis létrehozása
• CREATE DATABASE adatbazis_neve; Adatbázis használata pl. MySQL
adatbáziskezelő rendszernél • mysql> use adatbazis_neve Innentől kezdve az összes SQL utasítás ezen
az adatbázison lesz értelmezve (a következő „use” utasítás kiadásáig)
CREATE TABLE táblanév (
oszlopnév adattípus [feltétel], … …, oszlopnév adattípus [feltétel] [, táblaFeltételek]
); Az adattípushoz „DEFAULT érték” megadásával
alapértelmezett érték definiálható (egyébként alapértelmezetten NULL)
INT(n): egész szám, n darab számjegy
CHAR(hossz): hossz hosszú
karaktersorozat, fix hosszú VARCHAR(hossz): változó hosszú, de maximálisan hossz hosszú karaktersorozat DATE: dátum pl. ’1988-11-25’ TIME: időpont(óra,perc,másodperc) pl. ’16:05:32’ REAL: valós szám BIT(hossz): hossz darab bit
Feltételek (egy adott oszlopra vonatkoznak):
• PRIMARY KEY: elsődleges kulcs • UNIQUE: kulcs • REFERENCES tábla(oszlop)[ON-feltételek]:külső kulcs Táblafeltételek(az egész táblára
vonatkoznak):
• PRIMARY KEY(oszloplista): elsődleges kulcs • UNIQUE: kulcs • FOREIGN KEY(oszloplisa)REFERENCES
tábla(oszloplista): külső kulcs Ha a (külső) kulcs több oszlopból áll, akkor
csak táblafeltétel formájában adható meg!
Feladat: Hozzuk létre az • OSZTÁLY(osztálykód, osztálynév, vezAdószám) • DOLGOZÓ(adószám, név, lakcím, osztálykód) relációsémákat SQL-ben! CREATE TABLE Osztaly ( osztalykod CHAR(3) PRIMARY KEY, osztalynev CHAR(20), vezAdoszam DECIMAL(10) ); CREATE TABLE Dolgozo ( adoszam DECIMAL(10) PRIMARY KEY, nev CHAR(30), lakcim CHAR(40) DEFAULT ‘ismeretlen’, osztalykod CHAR (3) REFERENCES Osztaly(osztalykod) );
A tábla módosításakor a definiált kulcsfeltételek automatikusan ellenőrzésre kerülnek Külső kulcsok esetén szabályozható a rendszer viselkedése:
• Legyen T1 a hivatkozó tábla, T2 a hivatkozott tábla • ON UPDATE CASCADE = ha T2 egy sorában változik a kulcs
értéke, akkor a rá való T1-beli hivatkozások is megfelelően módosulnak • ON DELETE CASCADE = ha T2-ben törlünk egy sort, akkor T1ben is törlődnek a rá hivatkozó sorok • ON UPDATE SET NULL = ha T2 egy sorában változik a kulcs értéke, akkor T1-ben a rá való külső kulcs hivatkozások értéke NULL lesz • ON DELETE SET NULL = mint a CASCADE, csak NULL-ra állítja
Új oszlop hozzáadása:
• ALTER TABLE táblanév ADD (oszlopnév típus[táblafeltétel]); Oszlop módosítása:
• ALTER TABLE táblanév MODIFY (oszlopnév[táblafeltétel]); Oszlopok törlése:
• ALTER TABLE táblanév DROP (oszlop,oszlop,...,oszlop);
Az oszlopok törlését nem minden rendszer engedi meg. Tábla törlése:
• DROP TABLE táblanév;
ALTER TABLE Dolgozo ADD (szuldatum
DATE); ALTER TABLE Dolgozo MODIFY (lakcim
VARCHAR(60)); ALTER TABLE Osztaly MODIFY (vezAdoszam
REFERENCES Dolgozo(adoszam));
INSERT INTO táblanév [(oszloplista)] VALUES
(értéklista); Két fajtája:
• Amikor ismerünk minden adatot, és abban a sorrendben
adjuk meg, ahogy a táblában a mezőnevek egymás után következnek:
INSERT INTO Dolgozo VALUES (1111, ’ Tóth Aladár’, ’Szeged, Kálvária tér 2.’, ’12’); • Amikor a mezők sorrendjétől is függetlenül, akár csak
néhány mező kitöltve adunk meg:
INSERT INTO Dolgozo (nev, adoszam) VALUES (’ Tóth Aladár’, 1111); de ebben az esetben is fontos a mezők (általunk definiált) sorrendje. Amely mezők nem szerepelnek az oszloplistában, azok NULL értéket kapnak.
UPDATE táblanév
SET oszlop1 = kifejezés1, …, oszlopn = kifejezésn [WHERE feltétel]; Az értékadás minden olyan soron végrehajtódik amely eleget tesz a WHERE feltételnek (ennek hiányában az összes sorra) Pl. UPDATE Dolgozo SET lakcim = ’Szeged, Rózsa u. 5.’ WHERE nev = ’Tóth Aladár’;
DELETE FROM táblanév
[WHERE feltétel]; Hatására azon sorok törlődnek, amelyek eleget tesznek a WHERE feltételnek (ennek hiányában pedig az összes sor törlődik a táblában, de a séma megmarad!) Pl. DELETE FROM Dolgozo WHERE adoszam = 1111;
Kabinetes Linuxos rendszerben | Otthonról
SSH / PuTTY : solaris.inf.u-szeged.hu • mysql –u test • mysql> CREATE DATABASE test_hxxxxxx; Ezt csak egyszer kell megcsinálni! • mysql> use test_hxxxxxx Innentől kezdve erre az adatbázisra
vonatkoznak majd az SQL utasítások
Az aktuális adatbázisban szereplő táblák
listázása • SHOW TABLES; Egy adott tábla struktúrájának kiíratása
• SHOW COLUMNS FROM táblanév; Az SQL utasításainkat akár előre is
megírhatjuk egy szövegfájlban (mondjuk proba.sql), és azt végrehajthatjuk mysql-el • Ilyenkor a következő utasítással kell elindítani a
programot: mysql –u test test_hxxxxxx < proba.sql
Hozd létre a solaris szerveren az órán
megjelölt adatbázisban (test_hxxxxxx) a következő táblákat: Tábla: nevek Oszlop
Típus
Feltételek
id
INT(6)
PRIMARY KEY, NOT NULL, AUTO_INCREMENT
vezeteknev
VARCHAR(20)
NOT NULL
keresztnev
VARCHAR(20)
NOT NULL
szulev
INT(4)
NOT NULL
Tábla: reszleg Oszlop
Típus
Feltételek
kod
INT(6)
PRIMARY KEY, NOT NULL, AUTO_INCREMENT
nev
VARCHAR(20)
NOT NULL
fonokid
INT(6)
NOT NULL, REFERENCES nevek(id)
Vidd be a következő adatokat: Nevek: Losoncz Imre – 1972 Deák Áron – 1990 Tóth Ágnes – 1988 Juhász Ernő – 1986 Kiss Péter – 1957 Boka Dávid – 1989 Kovács Emese – 1973 Nagy Abonyi Éva – 1978
Részlegek:
Részleg neve
Főnök
Gazdasági
Kovács Emese
Műszaki
Juhász Ernő
Fejlesztés
Losoncz Imre
Hozz létre egy táblát a következő sémának (előbb töröld az órán létrehozott Dolgozó táblát!!): Dolgozo (id, vezeteknev,keresztnev) Az id-t automatikusan állítsa be a rendszer! Töltsd fel a Dolgozó táblát min 6 adattal. Egészítsd ki a Dolgozó táblát egy szuletesiev oszloppal, amely 4 számjegyből álló egész szám. Egészítsd ki a táblát egy fizetes oszloppal, amely 6 jegyű egész szám. Növeld meg azoknak a dolgozóknak a fizetését 5%-al, akik 80.000 Ft alatt keresnek. Növeld meg azoknak a fizetését 10%-al, akik elmúltak 50 évesek. Töröld ki a 60 évesnél idősebb dolgozókat.
Kötelező feladatokról részletesen (lsd. honlapot) Teljes doksi határideje a 11. gyakorlat kezdete
(2011. november 22.) • Sablon: http://www.stud.u-
szeged.hu/Urmos.Beata/minta_dokumentacio2.pdf • Beadás CooSpace-en keresztül Szünetre PHP olvasnivaló:
• http://www.stud.u-szeged.hu/Palatinus.Endre/db/PHP.pdf • http://www.stud.u-
szeged.hu/Palatinus.Endre/db/PHP_MySQL.pdf