MySQL (MariaDB) - feladatok (400 feladat)

Az oldal folyamatos fejlesztés alatt áll. Ha észrevételed van, örülnénk, ha megosztanád velünk: info @ tanit . hu

Segédletek

SQL tanulás

MySQL Utasítások

📦 DDL – Data Definition Language

Az adatbázis szerkezetének létrehozásához és módosításához szükséges utasítások.

CREATE

Új adatbázis létrehozása.

CREATE DATABASE iskola;

Új tábla létrehozása.

CREATE TABLE diak (
  id INT PRIMARY KEY,
  nev VARCHAR(100),
  eletkor INT
);

Új adatbázis létrehozása magyar nyelvű adatok számára.

CREATE DATABASE iskola
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_hungarian_ci;

ALTER TABLE

Meglévő tábla szerkezetének módosítása (pl. új oszlop hozzáadása).

ALTER TABLE diak ADD email VARCHAR(100);

DROP TABLE

Tábla végleges törlése.

DROP TABLE diak;

RENAME TABLE

Tábla nevének megváltoztatása.

RENAME TABLE diak TO tanulo;

🧮 DML – Data Manipulation Language

Az adatbázisban tárolt adatokkal való munka (beszúrás, módosítás, törlés, lekérdezés).

INSERT

Új rekord (sor) hozzáadása a táblához.

INSERT INTO diak (id, nev, eletkor) VALUES (1, 'Kovács Anna', 17);

SELECT

Adatok lekérdezése a táblából.

SELECT * FROM diak;

UPDATE

Meglévő rekord(ok) adatainak módosítása.

UPDATE diak SET eletkor = 18 WHERE id = 1;

DELETE

Rekord(ok) törlése a táblából.

DELETE FROM diak WHERE id = 1;

TRUNCATE

A teljes tábla összes sorának gyors törlésére szolgál, de a tábla szerkezete megmarad.

TRUNCATE TABLE tabla_nev;

🔍 Lekérdezési kiegészítők

DISTINCT

Kizárólag egyedi (ismétlésmentes) értékek lekérdezése egy oszlopból.

SELECT DISTINCT eletkor FROM diak;

WHERE

Feltétel megadása a lekérdezések szűréséhez.

SELECT * FROM diak WHERE eletkor > 16;

ORDER BY

Az eredmények rendezése egy vagy több oszlop alapján.

SELECT * FROM diak ORDER BY nev ASC;

GROUP BY

Rekordok csoportosítása azonos mezőértékek alapján.

SELECT eletkor, COUNT(*) FROM diak GROUP BY eletkor;

HAVING

GROUP BY utáni feltétel (pl. csak azokat a csoportokat listázza, ahol több sor van).

SELECT eletkor, COUNT(*) FROM diak
GROUP BY eletkor
HAVING COUNT(*) > 1;

JOIN

Két vagy több tábla összekapcsolása közös mező alapján.

SELECT diak.nev, osztaly.nev
FROM diak
JOIN osztaly ON diak.osztaly_id = osztaly.id;

📊 Fontos SQL függvények

COUNT()

Megszámolja a rekordok számát egy lekérdezés eredményében.

SELECT COUNT(*) FROM diak;

SUM()

Összegzi egy numerikus oszlop értékeit.

SELECT SUM(eletkor) FROM diak;

AVG()

Kiszámítja egy numerikus oszlop átlagát.

SELECT AVG(eletkor) FROM diak;

🧰 Egyéb gyakran használt utasítások

USE

Adatbázis kiválasztása az aktuális munkamenethez.

USE iskola;

DESCRIBE

Tábla szerkezetének (oszlopnevek, típusok) megjelenítése.

DESCRIBE diak;

SHOW

Adatbázisok, táblák vagy oszlopok listázása.

SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM diak;

Indexek

📌 Mi az az index?

Az index egy speciális adatstruktúra, amely gyorsabb keresést és lekérdezést tesz lehetővé a táblában.

Olyan, mint egy könyv tartalomjegyzéke: segít gyorsan megtalálni, amit keresel, anélkül hogy végig kellene nézni az egészet.

🔧 Index létrehozása

Egyszerű index

Alapértelmezett index létrehozása egy mezőre a gyors keresés érdekében.

CREATE INDEX index_nev ON tabla_nev (mezo_nev);

Egyedi (UNIQUE) index

Olyan index, amely megakadályozza a duplikált értékek tárolását az adott oszlopban.

CREATE UNIQUE INDEX egyedi_index ON tabla_nev (email);

Összetett (többoszlopos) index

Olyan index, amely egyszerre több mező kombinációjára épül.

CREATE INDEX osszetett_index ON tabla_nev (vezeteknev, keresztnev);

Index létrehozása a tábla létrehozásakor

Az index létrehozható közvetlenül a `CREATE TABLE` utasítás részeként is.

CREATE TABLE diak (
  id INT PRIMARY KEY,
  nev VARCHAR(100),
  email VARCHAR(100),
  INDEX (email)
);

🗑️ Index törlése

Meglévő index eltávolítása a tábláról.

DROP INDEX index_nev ON tabla_nev;

📋 Indexek listázása

Egy tábla indexeinek megtekintése.

SHOW INDEX FROM tabla_nev;

❗ Megjegyzés

Indexek gyorsítják a lekérdezéseket, de lassíthatják a beszúrást és frissítést, mert az indexet is karban kell tartani.

Idegen kulcsok

🔗 Mi az az idegen kulcs?

Az idegen kulcs (foreign key) egy olyan mező (vagy mezők), amely másik tábla elsődleges kulcsára hivatkozik. Segít kapcsolatot létrehozni két tábla között és biztosítja az adatok konzisztenciáját.

🛠️ Idegen kulcs létrehozása

Tábla létrehozásakor

Az idegen kulcs deklarálható a `CREATE TABLE` utasításon belül.

CREATE TABLE rendeles (
  id INT PRIMARY KEY,
  ugyfel_id INT,
  FOREIGN KEY (ugyfel_id) REFERENCES ugyfel(id)
);

Meglévő tábla módosításával

Ha a tábla már létezik, utólag is hozzáadható idegen kulcs az `ALTER TABLE` utasítással.

ALTER TABLE rendeles
ADD CONSTRAINT fk_ugyfel
FOREIGN KEY (ugyfel_id) REFERENCES ugyfel(id);

🔁 Hivatkozási szabályok (ON DELETE / ON UPDATE)

Az idegen kulcs viselkedését szabályozhatjuk, ha a hivatkozott rekord módosul vagy törlődik.

ON DELETE

  • CASCADE: A hivatkozott rekord törlésekor a kapcsolódó rekordok is törlődnek.
  • SET NULL: A kapcsolódó idegen kulcs értéke null lesz.
  • RESTRICT / NO ACTION: Megakadályozza a törlést, ha van kapcsolódó rekord.

Példa CASCADE-ra

FOREIGN KEY (ugyfel_id) REFERENCES ugyfel(id) ON DELETE CASCADE

🗑️ Idegen kulcs törlése

Egy idegen kulcs törléséhez előbb ismerni kell a nevét (pl. `fk_ugyfel`).

ALTER TABLE rendeles DROP FOREIGN KEY fk_ugyfel;

🔍 Idegen kulcsok megtekintése

A tábla összes kulcsának listázása (beleértve az idegen kulcsokat).

SHOW CREATE TABLE rendeles;

Vagy a `INFORMATION_SCHEMA` használata:

SELECT * FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'rendeles';

⚠️ Fontos megjegyzés

  • Idegen kulcs csak akkor hozható létre, ha a hivatkozott oszlopban van egyedi vagy elsődleges kulcs.
  • A táblák motorja legyen `InnoDB`, mert az `MyISAM` nem támogatja az idegen kulcsokat.