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 T1- ben 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 Műszaki Fejlesztés Kovács Emese Juhász Ernő 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.uszeged.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.uszeged.hu/palatinus.endre/db/php_mysql.pdf