Adatbázis-kezelés SQL-lel
SQL SQL = Structured Query Language – Strukturált Lekérdezőnyelv Relációs adatbázis-kezelők lekérdezési nyelve. Alapjait az IBM-nél fektették le az 1970-es években. Elvi alapot a relációs adatmodell szolgáltatott hozzá. Amerikában 1986-ban, az ISO 1987-ben jegyezte be szabványként.
SQL jellemzői nem algoritmikus jól definiált, egyértelmű elméleti alapokon nyugszik változói nincsenek, a behívónyelv változóit használja önmagát nem hívja meg (nem rekurzív) halmazorientált (relációkkal dolgozik) egyszerű, közérthető, de egyben hatékony feltételeket ad meg (megadott feltételeket folyamatosan figyeli)
SQL elemei 1. adatdefiníciós nyelv (Data Definition Language, DDL): relációk és indexek szerkezetének kialakítása, változtatása vagy törlése CREATE – létrehozás ALTER – módosítás DROP – törlés
SQL elemei 2. adatmanipulációs nyelv (Data Manipulation Language, DML): relációk adatainak felvitele, módosítása vagy törlése INSERT – adatok beszúrása UPDATE – adatok módosítása, frissítése DELETE – adatok törlése a relációból SELECT – adatok lekérdezése
SQL elemei 3. adatdevezérlő nyelv (Data Control Language, DCL): a felhasználók jogosultságait állítja be, azaz hogy egy adatbázis esetében milyen műveleteket használhat az adott felhasználó GRANT – jogok adása REVOKE – jogok visszavonása
Szintaktika Az SQL utasításai értelmes angol felszólító mondatok, melyek szerkezete szigorúan kötött, és igével (parancsszóval) kezdődik. A parancsszavakon kívül operandusok (pl.: reláció neve vagy reláció mezőinek neve) szerepelnek az utasításban. Íratlan szabály: parancsszavakat nagybetűvel írjuk, az operandusokat pedig kisbetűvel. Az utasításokat általában ; (pontosvessző) zárja le. Ha a mező vagy reláció műveleti jeleket vagy elválasztójelet tartalmaz, akkor [ ]-be kell tenni.
DDL utasítások és használatuk Adatbázis létrehozása: CREATE DATABASE adatbázisnév; Tábla létrehozása: CREATE TABLE táblanév(mező1 típus1[méret1], mező2 típus2[méret2]…); mező1, mező2: a tábla mezőinek neve a méret megadása nem kötelező, van olyan típus, ahol nem is adható meg
CREATE TABLE (folyt.) mezőtípusok : szöveges típusok: char(méret) – fix hosszúságú szöveg, varchar(méret) – változó hosszúságú szöveg dátumtípusok: date – dátum, time – idő számtípusok: integer – egész szám, float – lebegőpontos (valós) szám, double – dupla hosszúságú lebegőpontos szám logikai típus: boolean (csak igaz vagy hamis értéket vehet fel)
CREATE TABLE (folyt.) megadható mező szintű integritási feltételek (azaz mező neve és típusa után írható feltételek): PRIMARY KEY – elsődleges kulcs NOT NULL – a mező értéke nem lehet üres UNIQUE – a mezőérték a táblában egyedi CHECK (feltétel) – mezőre megadott ellenőrző feltétel DEFAULT érték – alapértelmezett érték megadása a mezőnek
CREATE TABLE (folyt.) megadható rekord szintű integritási feltételek (az összes mező nevének és típusának megadása után beírandó feltételek) PRIMARY KEY (mező1, mező2,…) – elsődleges kulcs megadása összetett kulcs esetén FOREIGN KEY (mező1, mező2,…) REFERENCES táblanév(mező1, mező2,..) – idegen kulcs megadása, a REFERENCES után meg kell adni, melyik tábla melyik mezőjére mutat az idegen kulcs CHECK (rekordszintű feltétel) – rekordra megadott ellenőrző feltétel
DDL utasítások és használatuk Adatbázis használatba vétele: USE dbnev; Felhasználó hozzáadása: CREATE USER IDENTIFIED BY 'jelszo'; felhasználó megadásánál a nevén kívül azt is meg kell adni, melyik hoston férhet hozzá az adatbázisokhoz localhost IP-cím % - bármely host
Módosítás Új mező hozzáadása: ALTER TABLE táblanév ADD újmező1 típus1[méret1], újmező2 típus2[méret2]; Mezőtípus módosítása: ALTER TABLE táblanév MODIFY mező1 újtípus1[újméret1]; Idegen kulcs hozzáadása: ALTER TABLE táblanév ADD FOREIGN KEY (fknev) REFERENCES tábla(mutatott_mező);
Módosítás és törlés Felhasználó jelszavának megváltoztatása: ALTER USER unev IDENTIFIED BY uj_jelszo; Tábla törlése: DROP TABLE táblanév; Adatbázis törlése: DROP DATABASE adatbázisnév;
DML utasítások és használatuk Adatok bevitele táblába: INSERT INTO táblanév VALUES(érték1, érték2, érték3, …); a szöveges és dátumértékeket ‘ ‘ (aposztróf) közé kell tenni az értéklistában szerepelhet NULL (üres) érték is
DML utasítások és használatuk Adatok importálása.txt fájlból a.txt fájlt be kell másolni a a.txt fájlt be kell másolni a /var/lib/mysql/adatbazisnev könyvtárba LOAD DATA INFILE ' vmi.txt' INTO TABLE dbnev.tablanev FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY "" LINES TERMINATED BY '\n' IGNORE 1 LINES;
LOAD DATA INFILE (folyt.) FIELDS TERMINATED BY után a.txt fájlban található mezőelválasztó karaktert kell megadni OPTIONALLY ENCLOSED BY után a szöveges mezőket határoló karaktert kell megadni – ha van LINES TERMINATED BY után a sor végét jelző karaktert kell megadni (alapesetben ez az enter, amit a \n szimbólummal adhatunk meg)
LOAD DATA INFILE (folyt.) IGNORE 1 LINES: az első sort nem importálja be ha a.txt fájl első sora az oszlopneveket tartalmazza, akkor azt nem kell beimportálni
DML utasítások és használatuk Adatok módosítása a táblázatban: UPDATE táblanév SET mező1=kifejezés, mező2=kifejezés [WHERE feltétel(ek)]; a SET utáni mezők értékét megváltoztatja a kifejezésben szereplőkre, de csak azokban az esetekben, ahol a WHERE utáni feltétel teljesül a WHERE használata nem kötelező, ha nincs ott, akkor az adott mezőben minden sort megváltoztat a parancs (feladattól függ a használata)
DML utasítások és használatuk Sorok törlése a táblából: DELETE FROM táblanév [WHERE feltétel(ek)]; azokat a sorokat törli a táblából, amikre a WHERE-ben megadott feltétel igaz ha elhagyjuk a WHERE-t akkor minden sort töröl!
DML utasítások és használatuk Adatok lekérdezése: SELECT [DISTINCT/TOP szám] mező1, mező2,… FROM tábla1, tábla2, … [WHERE feltétel(ek) GROUP BY csoportosítási mező(k) HAVING csoportosítási feltétel(ek) ORDER BY rendezési mező(k) ASC/DESC];
SELECT (folyt.) a FROM utáni táblákból kiválogatja a megadott mezőket, amik megfelelnek a WHERE utáni feltételnek a DISTINCT szóval az egyforma értékű sorok csak egyszer jelennek meg a TOP szám beírásával megadhatjuk, hogy a táblázat tetejétől hány sort akarunk kiíratni az ORDER BY után a sorba rendezés alapjául szolgáló mezőket kell megadni; az ASC növekvő, a DESC csökkenő sorrendre utal
SELECT (folyt.) a SELECT után a mezőnevek helyett kifejezéseket is megadhatunk, amik lehetnek függvények vagy műveletek mezőkkel (összeadás, kivonás, stb.) Használható függvények: COUNT(mezőnév) – a mező sorainak számát adja vissza MAX(mezőnév) – a mezőben lévő legnagyobb értéket adja vissza MIN(mezőnév) – a mezőben lévő legkisebb értéket adja vissza AVG(mezőnév) – a mező értékeinek átlagát adja vissza SUM(mezőnév) – a mező értékeinek összegét adja vissza
SELECT (folyt.) A mezők vagy kifejezések eredményének fejlécét tetszőlegesen átírhatjuk az alias segítségével. Az adott mezőnév vagy kifejezés mögé az AS kulcsszó írása után megadhatjuk azt a nevet, amit szeretnénk megjeleníteni (Pl.: SELECT vnev+kernev AS nev FROM tanulo;)
Beillesztés új táblába már létező táblából INSERT INTO újtáblanév SELECT mező1, mező2,… FROM tábla1, tábla2,… [WHERE feltétel(ek)]; a FROM után megadott táblá(k)ból kiválogatja a felsorolt mezőket, és belerakja az új táblába csak akkor működik, ha az új tábla felépítése és a kiválogatott mezők típusa sorrendhelyesen megegyezik amennyiben van WHERE megadva, akkor csak a feltételnek megfelelő sorok kerülnek az új táblába
DCL utasítások Jogosultságok adása felhasználóknak: GRANT jogosultságok ON dbnev.tablanev TO Jogosultságok: ALL PRIVILEGES – minden jogosultság DDL vagy DML parancsnevek PROCESS – láthatóvá válik a folyamatok listája RELOAD – flush parancsok használata (admin) Ha minden adatbázisra vagy táblára akarunk jogot adni, akkor a * karaktert használjuk
DCL utasítások Jogosultságok megvonása felhasználóktól: REVOKE REVOKE jogosultságok ON dbnev.tablanev TO működése megegyezik a GRANT parancséval