ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
1
|
Adatbáziskezelés 2. gyakorlat
A gyakorlat során MySQL adatbázisszerver és a böngészőben futó phpMyAdmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: ● Táblák létrehozása, módosítása ● Mező adattípusok kiválasztása ● Kulcsértékek meghatározása ● Táblák közötti kapcsolatok definiálása ● Intergritási feltételek megadása
Csatlakozás az adatbázishoz Indítsunk egy böngészőt, és írjuk bele: http://193.224.129.119/dbgyak . A gyakorlat céljaira használjuk az uNEPTUNKÓD felhasználónevet. Az ehhez tartozó jelszó is ugyanaz. Az ABC123 neptunkódú hallgató felhasználói neve tehát uABC123, jelszava uABC123.
© Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
2
|
A továbbiakban, amikor e leírásban az uNEPTUN vagy hasonló nevet használjuk, akkor azt minden hallgató a saját neptun kódjának behelyettesítésével értelmezze.
Táblák definiálása Hozzunk létre egy jármű táblát. A tábla tartalmazza a jármű típusát és rendszámát. CREATE TABLE jarmu (rsz CHAR(6), tipus VARCHAR(20)); A létrejött táblába szúrjunk be néhány adatot: INSERT INTO jarmu VALUES (‘JKK567’, ‘személyautó’); INSERT INTO jarmu VALUES (‘IFA453’, ‘teherautó’); Egyszerre több rekordot is beszúrhatunk: INSERT INTO jarmu VALUES (‘EVI001’, ‘roller’), (‘ADI007’,’motorkerékpár’); © Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
3
|
Nem kell minden parancsot újra begépelni, a Szerkesztés gomb megnyomásával megnyílik az alábbi ablak, amiben a megfelelő módosítások után kényelmesen többször is kiadhatjuk a parancsokat:
Ha van már legalább 5 rekordunk, listázzuk ki a tábla rsz és tipus mezőit: SELECT rsz, tipus FROM jarmu Mivel a tábla összes mezőjét kilistáztuk, az összes mező felsorolása helyett a * is használható: SELECT * FROM jarmu Az egyes mezőket átnevezhetjük az eredményrelációban, ha valamiért szükség van erre: SELECT rsz AS Rendszám, tipus AS Típus FROM jarmu A fentiek tetszőlegesen variálhatók: © Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
4
|
SELECT * , rsz, rsz AS Rendszám FROM jarmu
© Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
5
|
A rendszám mezőnek kulcsnak kellene lennie, de ezt egyelőre nem állítottuk be. Így most még gond nélkül felvehetünk azonos rendszámú járműveket, ami nyilvánvalóan hibás adatfelvitelre utal: INSERT INTO jarmu VALUES ('JNN867', 'bicikli'), ('JNN867','traktor');
Ezt az állapotot meg kell szüntetnünk. Állítsuk be, hogy rsz kulcsmező legyen: ALTER TABLE jarmu ADD PRIMARY KEY (rsz);
© Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
6
|
A parancsot nem tudta végrehajtani. Magyarázzuk meg az okát!
© Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
7
|
Töröljük ki a hibát okozó rekordokat: DELETE FROM jarmu WHERE rsz = 'JNN867';
Adjuk ki újra a korábbi parancsot, amivel az rsz mezőt kulcsértéknek állítjuk be: ALTER TABLE jarmu ADD PRIMARY KEY (rsz); Most már sikerült, hiszen nincs olyan rekord, ami ne tartaná be a megfogalmazott szabályt.
© Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
8
|
Ezután már létező rendszámokat nem tudunk újra felvinni: INSERT INTO jarmu VALUES ('JNN867', 'bicikli'), ('JNN867','traktor');
Ellenőrizzük a fenti parancs után a tábla tartalmát! Mit tapasztaltunk? Válasszunk egy rekordot, és módosítsuk a tartalmát. A rekord a kulcsérték alapján egyértelműen megtalálható. UPDATE jarmu SET tipus = 'Személygépjármű' WHERE rsz = “GJG593” Figyeljük meg, hogy a tábla szerkezetét az ALTER, a tábla adattartalmát pedig az UPDATE parancsokkal tudjuk módosítani. Adjunk egy márka mezőt a táblához: ALTER TABLE jarmu ADD marka VARCHAR(20) Nézzük meg a tábla tartalmát. © Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
9
|
Töltsük fel a tábla márka mezőjét életszerű adatokkal, például: UPDATE jarmu SET marka = 'IFA' WHERE rsz = “IFA453” A fentihez hasonló parancsok kiadása közben ellenőrizzük, vane olyan rekord, amiben a márka mezőt még nem töltöttük ki: SELECT * FROM jarmu WHERE marka IS NULL Így bármikor ellenőrizhetjük, hogy mely rekordokat kell még módosítanunk. Vegyük fel a gyártási év mezőt is: ALTER TABLE jarmu ADD gyartasiev int Töltsünk bele adatokat: UPDATE jarmu SET gyartasiev = 1980 WHERE rsz = “IFA453” Készítsünk olyan lekérdezést, ami a járművek adatai mellett azok életkorát is kiírja: SELECT *, 2014gyartasiev AS Kor FROM jarmu A CURDATE() és YEAR() függvények segítségével a lekérdezés univerzálisabb, hiszen nem tartalmazza konstansként a jelenlegi aktuális évszámot: SELECT *, YEAR ( CURDATE() ) gyartasiev AS Kor FROM jarmu Figyeljük meg, hogy a járművek korát sehol nem tároltuk le, csupán a lekérdezés alatt számítottuk ki és így az eredményrelációba került. Az eredményreláció pedig nem kerül tartós tárolásra.
Több tábla kapcsolata Kapcsoljuk a napsugár tábla óvodásaihoz a járműveket! Most feltételezzük, hogy egy gyerek egyetlen járművet birtokolhat és egy járműnek egyetlen kis gazdája lehet. Ez egy 1:1 kapcsolat. Először vizsgáljuk meg a napsugár tábla szerkezetét! Természetesen megtehetjük a grafikus felületen is, de ehelyett most adjuk ki a következő parancsot: SHOW CREATE TABLE napsugár © Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
10
|
A parancs a következő kimenetet adja (a teljes adattartalom megtekintéséhez jelöljük be a Teljes szövegek rádiógombot a Beállítások között):
Megkaptuk azt a parancsot, amivel a napsugár táblát létre lehet hozni (adatok nélkül, természetesen). Ellenőrizzük, hogy vane a táblának kulcsa (PRIMARY KEY). A fenti képernyőképen látható, hogy az ID mező kulcsként használható, ezért ezt, mint idegen kulcsot, be tudjuk írni a jármű táblába. Ehhez létre kell hoznunk egy tulajdonos mezőt, ahol arra kell figyelnünk, hogy a típusa feleljen meg az idegen kulcs (ID) típusának (INT). ALTER TABLE jarmu ADD tulajdonos INT Azt, hogy egy gyerek csak egy járművet birtokolhasson, a tulajdonos mezőt beállíthatjuk úgy, hogy az azonosítója csupán egyetlen járműnél szerepelhessen, azaz a táblában egyedi legyen: ALTER TABLE jarmu ADD UNIQUE(tulajdonos) A fenti két parancsot egyszerűen így is egybeírhattuk volna: ALTER TABLE jarmu ADD tulajdonos int UNIQUE © Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
11
|
A két tábla összekapcsolásához egy modernebb adatbázismotort és táblaformátumot kell használnunk. Ennek részleteibe nem megyünk bele. Adjuk ki a következő parancsokat: ALTER TABLE napsugár ENGINE=InnoDB; ALTER TABLE jarmu ENGINE=InnoDB; Ezután már beállíthatjuk, hogy a tulajdonos mező a napsugár tábla kapcsolómezője legyen, és a napsugár táblában az id mező értékét tartalmazza: ALTER TABLE jarmu ADD FOREIGN KEY(tulajdonos) REFERENCES napsugár (id) Módosítsunk a táblák adatain, szerezzünk tapasztalatot a kapcsolómező működéséről! A következő paranccsal figyeljük meg a jarmu tábla szerkezetét: SHOW CREATE TABLE jarmu
Láthatjuk, hogy milyen jarmu_idfk_1 néven hivatkozhatunk a két tábla kapcsolatára. Ez a név hasznos például, ha törölni akarjuk: ALTER TABLE jarmu DROP FOREIGN KEY jarmu_ibfk_1; Tegyük fel, most azt szeretnénk megoldani, hogy ha egy gyereket törlünk, mert például kijárta az óvodát, akkor a hozzá tartozó jármű is törlődjön az adatbázisból: © Fülep Dávid (Széchenyi István Egyetem), 2014
ÜZLETI INFORMATIKAI ESZKÖZÖK Adatbáziskezelés
12
|
ALTER TABLE jarmu ADD FOREIGN KEY(tulajdonos) REFERENCES napsugár (id) ON DELETE CASCADE; Próbáljunk is egy olyan gyereket törölni, akinek van járműve és figyeljük meg, mi történik. (Visszafelé nem működik ez a törlés, hiszen ha a járművet töröljük, a gyerek megmarad!)
A feladat befejezése A munka végeztével jelentkezzünk ki az adatbázis kliensből.
© Fülep Dávid (Széchenyi István Egyetem), 2014