Az adatbázis-kezelés alapjai (SQL alapok)
Ebben a cikkben összefoglaljuk az adatbázis-kezelés alapjait, bemutatjuk, hogy mit jelent az adatbázis, az SQL, megismerkedünk alapfogalmakkal, bemutatjuk a környezet kialakítását, szó lesz a MySQL adattípusairól, a kényszerfeltételekről, a záradékokról, illetve az adatbázisok, táblák, rekordok létrehozásáról, törléséről.
Ebben a bejegyzésben megpróbáljuk a legalapvetőbb információkat átadni, de minden témáról írtunk egy sokkal részletesebb cikket is, így ha valakit valamelyik téma mélyebben érdekel, akkor a bekezdések alatt található linkek segítségével elnavigálhat a teljes cikkhez, amelyben az adott téma példákkal kiegészítve, sokkal részletesebben ki van fejtve.
Mi az az adatbázis?
Az adatbázis olyan számítógépen tárolt és rendezett adathalmaz, melynek elemei összetartoznak. Az adatbázisok célja, hogy az adatokat hosszútávon, tartósan lehessen tárolni, illetve, hogy a tartalma gyorsan kereshető legyen.
Adatbázis elméleti példa
Egy közösségi oldalon profilokat lehet létrehozni, tudunk tartalmakat feltölteni, ismerősöket keresni. A profilokhoz tartozó adatokat, azaz például a felhasználónevet, a jelszót, az email címet, a születési dátumot adatbázisban szokás tárolni.
Adatbázis alapfogalmak
Most, hogy már tudjuk, hogy mi az az SQL, nézzünk meg pár alapvető relációs adatbázisokhoz kapcsolódó fogalmat.
Egyed
Egyednek nevezzük azt, aminek az adatait tároljuk az adatbázisban.
Például a közösségi oldalas példánál egy profil.
Attribútum (tulajdonság)
Az egyed egy jellemzője.
Az előző példánál maradva egy profil egy adata, például a vezetéknév, vagy telefonszám.
Tábla
A logikailag összetartozó adatokat egy táblában tároljuk.
Például a közösségi oldalas példánál maradva egy táblában tároljuk a regisztrált felhasználókat.
Rekord
Rekordnak nevezzük az adatbázis egy sorát.
Azaz, ha van egy adatbázisunk, amelyben személyek adatait tároljuk (például név és kor), akkor minden felvitt személy külön rekordnak tekinthető.
Mező
Az adatbázis egy oszlopa, azaz egy egyed attribútuma.
Például az előző fogalomnál említett példa esetében külön mezőnek tekinthető a név és a kor is. Gyakran csak oszlopként hivatkozunk rá.
>> Az alapfogalmakról ebben a leckében értekeztünk <<
Mit jelent az SQL?
Az SQL (ami az angol Structured Query Language szót jelöli) egy relációsadatbázis-kezelő lekérdezési nyelv. Bár nem tekintjük programozási nyelvnek, de mégis hasonlóan kell elképzelni, itt is vannak utasítások, amelyek segítségével műveleteket végezhetünk. Létrehozhatunk adatbázisokat, adatokat adhatunk az adatbázishoz, törölhetünk belőle, módosíthatjuk az egyes adatokat, lekérdezhetjük azokat, vagy rendezhetjük.
Környezet kialakítása
A XAMPP egy platformfüggetlen webszerver-szoftvercsomag, amely az alábbi eszközöket tartalmazza:
- Apache webszerver
- MariaDB (MySQL) adatbáziskezelő
- PHP értelmező
- FileZilla FTP-kliens
A XAMPP egy integrált rendszer, melynek óriási előnye, hogy egyetlen egy csomagban tartalmazza az összes webes alkalmazások készítéséhez szükséges eszközt, így nem kell egyesével letöltenünk őket az internetről, illetve telepítenünk. Ha valaki nem annyira járatos a programok telepítésében, akkor annak érdemes a XAMPP-ot választania, hiszen ennek az az előnye, hogy minden szoftver egyetlen egy telepítőbe van csomagolva, így csak egyetlen egy szoftvert kell letölteni és telepíteni.
>> A XAMPP részletes telepítési útmutatóját itt olvashatod <<
SQL nyelvi elemek csoportosítása
Az SQL utasításait négy osztályba rendezhetjük, minden osztálynak megvannak a maga feladatai, illetve utasításai.
- Adatdefiníciós nyelv (Data Definition Language – DDL)
- adatbázisok sémájának definiálására használják
- jellemző utasításai: CREATE, ALTER, DROP
- Adatlekérdező nyelv (Data Query Language – DQL)
- adatok lekérdezéséhez, lehívásához használják
- jellemző utasításai: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
- Adatmanipulációs nyelv (Data Manipulation Language – DML)
- adatok létrehozására, módosítására, törlésére használják
- jellemző utasításai: INSERT, UPDATE, DELETE
- Adatelérést Vezérlő Nyelv (Data Control Language – DCL)
- jogosultságok adása
- jellemző utasítások: GRANT, REVOKE
>> A nyelvi elemek csoportosításáról itt olvashatsz részletesebben <<
SQL adattípusok
Egy adatbázis-kezelő esetében az adattípusok határozzák meg azt, hogy egy oszlop milyen értéket vehet fel. Az SQL elvei szerint, egy oszlopnak (mezőnek) minden esetben meg kell határozni az adattípusát már a tábla létrehozásakor, ez mutatja meg, hogy az egyes oszlopokban milyen adatokat, értékeket lehet tárolni.
A MySQL-ben három főkategóriába sorolhatóak az adattípusok:
- szöveg
- szám
- dátum és idő
Szöveg adattípusok
Adattípus | Leírás |
---|---|
CHAR | Rögzített hosszúságú karakterlánc. |
VARCHAR | Változó hosszúságú karakterlánc. |
TEXT | Szöveget tárol. |
Szám adattípusok
Adattípus | Leírás |
---|---|
BIT | Bitérték típus. |
BOOL | Logikai értéket tárol. |
INT | Közepes méretű egész szám tárolására alkalmas. |
FLOAT | Lebegőpontos szám. |
DOUBLE | Normál méretű lebegőpontos szám. |
DECIMAL | Fixpontos szám. |
Dátum és idő adattípusok
Adattípus | Leírás |
---|---|
DATE | Dátum. Formátum: év-hónap-nap (YYYY-MM-DD) |
TIMESTAMP | Időbélyeg. Formátum: év-hónap-nap óra:perc:másodperc (YYYY-MM-DD hh:mm:ss) |
TIME | Idő. Formátum: óra:perc:másodperc (hh:mm:ss) |
YEAR | Év. Formátum: év (YYYY) |
>> Itt olvashatsz bővebben a MySQL adattípusairól. <<
SQL megszorítások
Az SQL megszorítások célja elkerülni azt, hogy a felhasználó helytelen rekordokat vigyen fel az adatbázisba. Az alábbi korlátozások az adatbázistábla oszlopaira, azaz mezőire vonatkozó szabályok.
Név | Leírás |
---|---|
NOT NULL | az oszlop értéke nem lehet NULL (üres) |
UNIQUE | az oszlop összes értékének egyedinek kell lenni |
PRIMARY KEY | a NOT NULL és a UNIQUE kombinációja, minden rekordnak egyértelműen beazonosíthatónak kell lennie |
FOREIGN KEY | egyértelműen beazonosíthatónak kell lennie egy rekordnak egy másik táblában |
CHECK | az oszlop értékének meg kell felelnie a meghatározott feltételnek |
DEFAULT | egy alapértelmezett értéket állít be az oszlopnak, ha a felhasználó nem adott volna meg értéket |
>> Az összes megszorítást bemutatjuk ebben a cikkben példákon keresztül <<
Elsődleges kulcs
A PRIMARY KEY megszorítást magyarul elsődleges kulcsnak nevezzük. Az elsődleges kulcs egy olyan érték, amely alapján minden rekord egyértelműen és összetéveszthetetlenül beazonosítható. Ebből kifolyólag az elsődleges kulcs egy teljesen egyedi érték, ez az érték nem tartalmazhat NULL-t. Egy táblának csak egyetlen egy elsődleges kulcsa lehet, amely állhat egy vagy több oszlopból is. Ha egy oszlopból áll, akkor egyszerű kulcsnak, ha több oszlopból, akkor összetett kulcsnak nevezzük.
Egyszerű elsődleges kulcs szintaxisa
CREATE TABLE tábla (
oszlop adattípus NOT NULL,
PRIMARY KEY (oszlop)
);
Code language: PHP (php)
>> Példákat, illetve részletesebb leírásokat itt találsz az elsődleges kulcsról <<
Idegen kulcs
Az idegen kulcsot magyarul szokás másodlagos kulcsnak is nevezni, míg angolul FOREIGN KEY-ként hivatkozunk rá. A másodlagos kulcs egy olyan oszlop vagy több oszlop, amely kapcsolatot biztosít két tábla adatai között. Az idegen kulcs egy olyan azonosító, amellyel egy másik tábla elsődleges kulcsára hivatkozhatunk. Leegyszerűsítve azt mondhatjuk, hogy az idegen kulcs egy másik tábla elsődleges kulcsa.
Idegen kulcs szintaxisa
CREATE TABLE tábla (
oszlop adattípus,
FOREIGN KEY (oszlop) REFERENCES másikTábla(elsődlegesKulcs)
);
>> Az idegen kulcsról itt olvashatsz bővebben + példák <<
Adatbázis létrehozása
Adatbázis létrehozásához a CREATE DATABASE utasítást kell használnunk.
SQL CREATE DATABASE szintaxis
CREATE DATABASE adatbázis;
>> Az adatbázis létrehozásáról itt olvashatsz hosszabban <<
Adatbázis törlése
A DROP DATABASE utasítással törölhetjük, vagy ahogy az angol kulcsszó is mutatja, dobhatjuk el a már használni nem kívánt adatbázisokat. Az adatbázis eldobásával az adatbázisban tárolt táblák, adatok, rekordok is eldobásra, törlésre kerülnek.
SQL DROP DATABASE szintaxis
DROP DATABASE adatbázis;
Tábla létrehozása
A CREATE TABLE utasítással egy új táblát hozhatunk létre az adatbázisban. A létrehozott táblában adatokat tárolhatunk. Ezeken a tárolt adatokon végezhetünk később lekérdezéseket.
SQL CREATE TABLE szintaktika
<code>CREATE TABLE táblaNév (
oszlopNév1 adattípus [megkötések],
oszlopNév2 adattípus [megkötések],
...
);</code>
Code language: SQL (Structured Query Language) (sql)
>> A CREATE TABLE utasításhoz itt találhatsz példákat <<
Tábla törlése
A DROP TABLE utasítást arra használjuk, hogy már létező adatbázistáblákat töröljünk. Az utasítással mindenképp körültekintően kell bánni, hiszen egy adatbázistábla eldobásával, a tábla összes rekordja, adata törlődik.
SQL DROP TABLE szintaxis
DROP TABLE tábla;
>> A DROP TABLE utasításról itt olvashatsz bővebben <<
Rekord hozzáadása
Az INSERT INTO utasítással új sorokat, rekordokat adhatunk hozzá egy adatbázistáblához.
Az INSERT INTO utasítást kétféleképpen lehet használni, a használat módjától függően különböző szintaktika érvényesül. Az első esetként felírt szintaxist akkor használjuk, ha a megadott adatok, értékek abban a sorrend követik egymást, ahogy az az adatbázistábla szerkezetében megvannak határozva. A sorrendiségből következik, hogy a felvitt értékek számának meg kell egyeznie az adatbázis táblájának oszlopszámával.
<code>INSERT INTO tábla
VALUES (érték1, érték2 ...);</code>
Code language: SQL (Structured Query Language) (sql)
Azaz, ha az INSERT INTO után megadott tábla öt oszlopot, mezőt tartalmaz, akkor a VALUES után lévő zárójelbe öt értéket kell felsorolnunk. Nagyon fontos, hogy az adattípusok megfeleljenek, azaz, ha a tábla második oszlopa egy számtípus, akkor a VALUES utáni zárójelben lévő második érték nem lehet szöveg típusú.
A második szintaxis pont azokban az esetekben lehet hasznos, amikor nem szeretnénk minden oszlop értékét megadni. Ebben az esetben az INSERT INTO és a tábla neve után meg kell adnunk azokat az oszlopokat, amelyeket adatokkal szeretnénk feltölteni.
INSERT INTO tábla (oszlop1, oszlop2 ...)
VALUES (érték1, érték2 ...);
>> SQL rekordok hozzáadása, példákkal <<
Rekord törlése
Az SQL DELETE utasításával adatbázistáblák rekordjait tudjuk törölni. A törlendő rekordokat a WHERE feltétellel kell meghatározni. Ebben az esetben csak azok a rekordok fognak törlődni, amelyek esetében teljesül a WHERE feltételben meghatározott kitétel.
<code>DELETE FROM tábla
WHERE feltétel;</code>
Code language: SQL (Structured Query Language) (sql)
Az alábbi szintaxist használva a tábla minden rekordja törlődik.
DELETE FROM tábla;
>> A rekordok törléséről itt találsz több információt <<
SQL SELECT és FROM utasítások
Az SQL SELECT utasítását arra használjuk, hogy adatokat kérdezzünk le az adatbázisból. Visszatérési értéke egy vagy több rekord, attól függően, hogy hány rekord felel meg a lekérdezésnek. Ezt a visszatérési értéket eredményhalmaznak nevezzük.
A FROM utasítást arra használjuk, hogy meghatározzuk vele, hogy mely táblából szeretnénk adatokat lekérdezni. A SELECT után meghatározott oszlopok értékeit a FROM után definiált táblából szedi.
<code>SELECT oszlop(ok)
FROM tábla;</code>
Code language: SQL (Structured Query Language) (sql)
>> A SELECT és a FROM itt kerül részletes bemutatásra, példákkal szemléltetve <<
SQL WHERE záradék
Az SQL WHERE utasítását arra használjuk, hogy a lekérdezést szűrni tudjuk, a lekérdezés eredményeként csak azok a rekordok kerülnek megjelenítésre, amelyek eleget tesznek a WHERE után meghatározott feltételeknek.
SQL WHERE szintaktika
SELECT oszlop(ok)
FROM tábla
WHERE feltétel(ek);
>> Az SQL WHERE záradékról itt találsz még több infót és példát <<
SQL operátorok
A WHERE záradék esetében különböző operátorok is használhatók, ezekkel a feltételeket lehet specifikálni, például megadhatjuk, hogy az egyik mezőnek az értékének nagyobbnak kell lennie egy konkrét értéknél, vagy szimplán két feltétel közötti viszonyt írhatjuk le.
De előtte soroljuk fel tételesen az SQL operátorait:
- egyenlő operátor
- nagyobb operátor
- kisebb operátor
- nagyobb vagy egyenlő operátor
- kisebb vagy egyenlő operátor
- nem egyenlő (NOT) operátor
- AND operátor
- OR operátor
- BETWEEN operátor
- LIKE operátor
- IN operátor
>> Az SQL operátorokról itt olvashatsz bővebben (+ példák) <<
SQL ORDER BY utasítás
Az SQL ORDER BY záradék segítségével a lekérdezések eredményét, azaz a kapott eredményhalmazt lehet rendezni. A rendezés lehet növekvő vagy csökkenő. Alapértelmezés szerint, azaz, ha nem adunk meg módosítót, akkor a növekvő (ASC) rendezés kerül végrehajtásra. Ha csökkenő sorrendbe szeretnénk rendezni, akkor a DESC módosítót kell megadnunk.
SQL ORDER BY módosítók:
- ASC (növekvő rendezés, alapértelmezett, nem kötelező megadni)
- DESC (csökkenő rendezés)
SQL ORDER BY szintaktikája
SELECT oszlop(ok)
FROM tábla
WHERE feltétel
ORDER BY oszlop(ok) [ASC | DESC]
Code language: CSS (css)
>> ORDER BY utasítás bemutatása példákon keresztül <<
SQL GROUP BY záradék
Az SQL GROUP BY utasítását arra használjuk, hogy összegezzük vagy csoportosítsuk az azonos értékű oszlopok rekordjait.
SQL GROUP BY szintaktikája
SELECT oszlop(ok)
FROM tábla
WHERE feltétel
GROUP BY oszlop(ok)
ORDER BY oszlop(ok);
>> GROUP BY záradék bemutatása példákkal <<
SQL JOIN, azaz táblák összekapcsolása
Egy adatbázisban általában nem csak egy táblát tárolunk, hanem többet is. Az átláthatóság érdekében célszerű az adatokat több táblába rendezni.
Például egy webshop esetében érdemes külön adatbázis táblát létrehozni a vásárlók és a vásárlások számára. Fölösleges egyetlen egy táblában tárolni a vásárló nevét és a vásárlás részleteit, például a rendelés azonosítót és a rendelt termékeket. Miért? Mert, ha egy vásárló többször vásárol, akkor a személyes adatai (például név, telefonszám, cím) többször szerepelni az adatbázisban. Ezt nevezzük redundanciának.
Ha készítünk egy külön táblát a vásárlóknak, amelyben az adataikat tároljuk és egy külön táblát a vásárlásoknak, akkor a vásárlást tartalmazó rekordban csak a vásárlóra kell hivatkozni, azaz nem kell minden adatát újból felvinni, mert a vásárló tábla már tartalmazza azt.
Az összekapcsolással (angolul JOIN) két vagy több táblát tudunk összekötni egy összefüggő mező alapján, azaz két különböző tábla rekordjait tudjuk egybefűzve megjeleníteni.
Az összekapcsolásoknak négy típusát különböztetjük meg:
- (INNER) JOIN
- LEFT (OUTER) JOIN
- RIGHT (OUTER) JOIN
- FULL OUTER JOIN
Példa táblák összekapcsolására: A webáruházas példánál maradva legyen egy “vasarlok” és egy “vasarlas” táblánk. A “vasarlok” táblában tároljuk a vásárlók adatait, minden vásárlónak megadtunk egy egyedi azonosítót (ID), amely alapján egyértelműen beazonosítható. A “vasarlasok” táblában van egy a vásárlást azonosító ID és egy a vásárlót azonosító ID. A két tábla között a kapcsolódási pont a “vasarlok” tábla ID-ja és a “vasarlasok” tábla vasarloID-ja.
>> A 4 JOIN részletes részletes leírását, példákkal együtt itt találod <<