1. Gyakorlat

Rólam
   Főoldal
   Önéletrajzom
   Képek

Tanulmányok és Oktatás
   EAF1
   EAF3
   EAF4
   Fontkészlet
   PNY1
   PP
   ProgKör
   Visual Basic

Érdeklődési körök
   Linux
   Linux PalmLD
   RDiff

Munkák
   Önéletrajz
   CV in English




utolsó módosítás:
2010. augusztus 9.

A következő gyakorlatok céljai:

  • Ismerkedés a MySQL környezettel (Linux operációs rendszer alatt).
  • Adatbázis tervezés, az EAF4 tárgyhoz szükséges mértékben.

A gyakorlatok szép fokozatosan hagyják magára a tanulót, önálló munkára szoktatva. Ha valaki úgy érzi, hogy valamit nem ért, valószínűleg előzőleg valami felett elsiklott.

Megjegyzés:
Az előadás diák elolvasása, nem helyettesíti az előadásokra bejárást, amely erősen ajánlott (egyestől különböző jegy elérése érdekében).
Az anyagban előfordulhat hiba, ha szóltok, ezeket javítom.
Annak aki szeretne megtanulni rendesen programozni szüksége van jó dokumentációra. A MySQL neten elérhető dokumentációja angol nyelvű. Így aki nem érti a szakmai angolt a következőket teheti (annak érdekében, hogy ne bukjon meg, mert enélkül nem fogja tudni elsajátítani az önálló munkát):
  • Megtanul gyorsan angolul.
  • Beszerez könyvesboltból, könyvtárból, ismerőstől magyar nyelvű dokumentációt. A MySQL esetében a Tanuljuk meg 24 óra alatt című sorozat megfelelő részét tudom ajánlani. (Az előadáson előfordulhat, hogy lesz más ajánlott irodalom is.)

1. Feladat

A első feladatsor célja, hogy megtervezzük és létrehozzuk az adatbázist. A feladat során egy képzeletbeli zöldséges lesz a megrendelőnk. (Az EAF4 házi feladatok megoldása során a megrendelő szerepét is többé kevésbe a hallgató játsza el, saját maga számára.)

Az adatbázisban tárolandó dolgok összegyűjtése

A zöldségessel való beszélgetésünk során megállapítottuk, hogy a zöldséges a következő dolgokat akarja az adatbázisban tárolni:

  • A forgalmazott zöldségek, aktuális készlettel.
  • A beszállítók adatai.
  • Melyik beszállítótól milyen zöldséget lehet venni.

Vázoljuk fel, hogy milyen adataink és tábláink lesznek

Egy táblában egy oszlop egy tulajdonságot reprezentál.

Egy táblában azokat az adatokat tároljuk, amelyek összetartoznak. Ez azt jelenti, hogy elemhez [rekordhoz, sorhoz] egyértelműen hozzárendelhető az adott tulajdonság [oszlop]. (Persze szükséges, hogy logikailag is összetartozzanak az adatok.)

database.png
Az adatbázis szerkezete első közelítésben
Megjegyzés:
Ahhoz, hogy a táblák közötti konzisztencia megfelelően legyen kezelve, a kulcsokat védeni kell. Erre azért lehet szükség, hogy nehogy egyik táblából olyan adatot tudjunk törölni, amire másik tábla hivatkozik [HF: kikeresendő a MySQL dokumentációjából, http://www.mysql.org/doc .]

2. Kapcsolódjuk az adatbázis kiszolgálóhoz

Megjegyzés:
A helyi gépen a teszt adatbázist fogjuk használni, amelyben lehetséges a másik adatainak módosítása is. Ezért ha a programunk nem úgy működik, ahogy azt elvárnánk tőle, gyanakodjunk erre is. Azért, hogy az általános szórakozás ne ezen menjen, nem írom le, hogyan lehet a másik adatait módosítani.
mysql test

3. Hozzuk létre a táblákat

Az első táblát a következőképpen kell létrehozni:

CREATE TABLE vegetables (id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, name TEXT NOT NULL);
Megjegyzés:
A mysql konzolon kérhetjük a számítógép segítségét: help <parancs>.

A felhasznált típusok:

  • INTEGER: egész szám.
  • PRIMARY KEY: A mező elsődleges kulcs lesz, tehát a rekordok között ennek a mezőnek egyedinek kell lennie.
  • NOT NULL: A mező kitöltése kötelező.
  • AUTO_INCREMENT: Amennyiben nem adunk meg értéket a mező számára, akkor a rendszer az első alkalommal az 1 értéket rendeli hozzá, utána folyamatosan növeli ezt az értéket.
  • TEXT: tetszőlegesen hosszú szöveges mező.

A másik két tábla létrehozása önálló feladat.

4. Változtassuk meg a tábla szerkezetét

Amikor eljutottunk erre a pontra, hirtelen telefonhívást kapunk, és a zöldséges közli, hogy elfelejtette mondani: a zöldségekhez az aktuális árukat, és a raktáron lévő mennyiséget (kg-ban) is szeretné tárolni.

Semmi gond:

ALTER TABLE vegetables ADD COLUMN (price INTEGER, storage INTEGER);

Ekkor jön a következő hívás, hogy az árat mégsem kell tárolni. Tipp: ALTER, DROP COLUMN.

5. Vegyünk fel adatokat

INSERT INTO vegetables (name, storage) VALUES ('répa', 2);

Vegyünk fel még öt zöldséget.

Vegyünk fel szállítókat is.

Kapcsoljuk össze a szállítókat a termékkel.

6. Módosítsunk egy adatot

UPDATE vegetables SET storage = 3 WHERE name = 'répa';

Modosítsunk további adatokat.

7. Törlés

Töröljük ki az 1-es azonosítóval jelölt szállítót.

DELETE FROM suppliers WHERE id = 1;

8. Listázások

Listázzuk ki a termékeket:

SELECT * FROM vegetables;

Listázzuk ki azokat a szállítókat, amelynek azonosítói kisebbek, mint öt:

SELECT * FROM suppliers WHERE id < 5;

Válasszuk ki azokat a zöldségeket, amelyek répafélék (most név alapján):

SELECT * FROM vegetables WHERE name LIKE '%répa%';

9. Összetett lekérdezés

A következő feladat előtt bizonyosodjunk meg a következőkről (megfelelő SELECT utasítások segítségével - a hibásakat javítsuk, hogy a feltétel teljesüljön):

  • Van olyan zöldség amelyiknek azonosítója 1, és ezt répának hívják.
  • Van olyan szállító, amelynek azonosítója 1.
  • A supplied_vegetables táblában van olyan rekord, amelyben a vegetable_id = 1 és a supplier_id = 1.

Listázzuk ki azokat a szállítókat, amelyek répát szállítanak be:

SELECT suppliers.name FROM vegetables
LEFT JOIN vegetable_suppliers ON vegetables.id = vegetable_id
LEFT JOIN suppliers ON supplier_id = suppliers.id
WHERE vegetables.name = 'répa';

10. Dobjuk el a táblákat

DROP TABLE vegetables;

A másik két tábla eldobása (törlése) önálló feladat.