Adatbázis-kezelés · SQL › Adatbázis és táblák létrehozása MariaDB-ben
10–11. osztály · MariaDB / phpMyAdmin
Adatbázis és táblák létrehozása MariaDB-ben
Két összekapcsolt táblát készítesz egy kitalált munkahely számára. Kipróbálod, hogyan védik az adatokat a kulcsok és az ellenőrző feltételek.

A lecke végére
- létrehozol egy adatbázist és két táblát
- megkülönbözteted a NOT NULL, DEFAULT, CHECK és FOREIGN KEY szerepét
- helyes és hibás próbaadattal is ellenőrzöl
Amit már tudsz
- fut a MariaDB és megnyílik a phpMyAdmin
- ismered az elsődleges és idegen kulcsot
Készíts külön gyakorlóadatbázist
Nyisd meg a helyi phpMyAdmint. Az Új ponttal és a név megadásával készíthetsz adatbázist; az alábbi SQL ugyanezt is tartalmazza. A nyelvi felület és az adatbázis illesztési sorrendje két külön beállítás. Az utf8mb4 karakterkészletet, az utf8mb4_hungarian_ci összehasonlítási szabályokat jelöl.

Hozd létre a két táblát
Az adatbázis SQL lapján futtasd a kódot egy üres gyakorlókörnyezetben. Az osztályok táblája kerül előre, mert a dolgozók arra hivatkoznak. A példában a dolgozókód kitalált nyolckarakteres azonosító; személyi okmányazonosítót ne használj.
CREATE DATABASE IF NOT EXISTS alkalmazott_gyakorlas CHARACTER SET utf8mb4 COLLATE utf8mb4_hungarian_ci;USE alkalmazott_gyakorlas; CREATE TABLE osztaly ( oid INT NOT NULL AUTO_INCREMENT, onev VARCHAR(20) NOT NULL, PRIMARY KEY (oid)) ENGINE=InnoDB; CREATE TABLE dolgozo ( dolgozokod CHAR(8) NOT NULL, nev VARCHAR(40) NOT NULL, fizetes DECIMAL(12,2) NOT NULL CHECK (fizetes >= 150000), szuldat DATE, nem CHAR(1) CHECK (nem IN ('F', 'N')), irsz CHAR(4) NOT NULL DEFAULT '8200' CHECK (irsz REGEXP '^[1-9][0-9]{3}$'), varos VARCHAR(30) NOT NULL DEFAULT 'Veszprém', utca_hsz VARCHAR(50), oid INT NOT NULL, PRIMARY KEY (dolgozokod), FOREIGN KEY (oid) REFERENCES osztaly(oid)) ENGINE=InnoDB;A példa korszerű MariaDB-hez készült. A CHECK feltételek érvényesítése régi kiszolgálóknál eltérhet; a következő próba ezt is ellenőrzi. Az adatbázis létezésének vizsgálata nem védi a táblákat: már létező táblák esetén a CREATE TABLE hibát jelez, nem írja felül az adatokat.
Értsd meg a megkötéseket
| Megadás | Mit biztosít? |
|---|---|
| PRIMARY KEY | egyedi, nem NULL azonosító |
| NOT NULL | az érték nem lehet NULL; az üres szöveget önmagában nem tiltja |
| DEFAULT | kihagyott érték helyett alapérték |
| CHECK | a megadott logikai feltételt vizsgálja |
| FOREIGN KEY | létező osztályra hivatkozás |
| ENGINE=InnoDB | tranzakcióképes tárolómotor, idegenkulcs-támogatással |
A CHECK nem helyettesíti a NOT NULL megadást. A nem mező ebben a mintában kihagyható; megadott értéke F vagy N lehet. Az irányítószám szöveg, mert azonosító jellegű; a négy számjegy formai ellenőrzése nem bizonyítja, hogy létező irányítószámról van szó.
A CHAR és VARCHAR karakterhosszt ír le; a tényleges tárigény a karakterkészlettől és a tárolómotortól is függ. A pénzösszeghez a pontos DECIMAL típus illik.
Vigyél be adatot és tesztelj
Előbb az osztályt, majd a dolgozót rögzítsd. A LAST_INSERT_ID() a most létrejött osztály azonosítóját adja, így nem kell feltételeznünk, hogy az 1 lesz.
USE alkalmazott_gyakorlas; INSERT INTO osztaly (onev) VALUES ('Fejlesztes');SET @osztaly_id = LAST_INSERT_ID();INSERT INTO dolgozo (dolgozokod, nev, fizetes, oid)VALUES ('D0000001', 'Proba dolgozo', 200000, @osztaly_id); SELECT d.dolgozokod, d.nev, d.fizetes, o.onevFROM dolgozo AS dJOIN osztaly AS o ON d.oid = o.oid;Két szándékosan hibás beszúrás
Külön-külön futtasd az alábbi utasításokat. Mindkettőnek hibát kell jeleznie; az egyik az alacsony fizetést, a másik a hiányzó szülőrekordot próbálja bevinni.
INSERT INTO dolgozo (dolgozokod, nev, fizetes, oid)VALUES ('D0000002', 'Proba ketto', 100000, @osztaly_id); INSERT INTO dolgozo (dolgozokod, nev, fizetes, oid)VALUES ('D0000003', 'Proba harom', 200000, -1);Előbb próbáld meg, utána ellenőrizd
Az elsőt a CHECK, a másodikat a FOREIGN KEY feltétel utasítja el. A sikeres mintából egy dolgozó látható a csatolt osztálynévvel. A két hibás utasítást ne egyetlen tömbként értékeld: az első hiba után a felület leállíthatja a további futtatást.
Ellenőrizd a munkádat
Nézd át az adatbázisodat a phpMyAdminban, és válaszolj a kérdésekre.
- Az
alkalmazott_gyakorlasadatbázisutf8mb4_hungarian_ciillesztéssel jött létre? - Előbb az
osztaly, utána adolgozotábla készült el? - A helyes beszúrás után a JOIN-os lekérdezés egy sort adott az osztály nevével?
- Mindkét szándékosan hibás beszúrás hibát jelzett, és meg tudod mondani, melyik megkötés miatt?
- A
SHOW CREATE TABLE dolgozo;eredményében látod a CHECK és a FOREIGN KEY sort?
Továbbgondolás: mi történik, ha törölni próbálod az osztályt?
Futtasd: DELETE FROM osztaly WHERE oid = @osztaly_id;. Az adatbázis elutasítja a törlést, mert egy dolgozó még erre az osztályra hivatkozik: a hivatkozási épség (FOREIGN KEY) így véd az „árva” rekordoktól. Előbb a hivatkozó dolgozót kell törölni vagy másik osztályba áthelyezni. (Haladó lehetőség: az ON DELETE CASCADE beállítás a szülővel együtt a gyerekrekordokat is törli; ezt csak tudatosan szabad használni.)
Ha az egész kódot másodszor is lefuttatod, a CREATE TABLE hibát jelez, mert a tábla már létezik. Ez nem baj: a meglévő adatok megmaradnak. Gyakorlóadatbázisnál újrakezdéshez előbb a dolgozo, aztán az osztaly táblát töröld (DROP TABLE), a hivatkozás miatt ebben a sorrendben.
Az elméleti háttér a relációs adatmodell leckében van; a környezet beállítását a XAMPP telepítése mutatja be.

