A triggerek olyan speciális tárolt eljárások az adatbázisokban, amelyek automatikusan végrehajtódnak bizonyos események bekövetkeztekor, mint például rekordok beszúrása, frissítése vagy törlése. A MySQL-ben a triggerek hatékony eszközök az adatbázis integritásának megőrzésére, adatellenőrzésekre és automatizált adatkezelési műveletek végrehajtására. Ebben a bejegyzésben áttekintjük a triggerek működését, típusait és használatának legjobb gyakorlatait.
Mi az a Trigger?
A trigger egy olyan eljárás, amely automatikusan végrehajtódik, amikor egy meghatározott esemény bekövetkezik egy adott táblában. A triggerek két fő összetevője a művelet típus (INSERT, UPDATE, DELETE) és az időzítés (BEFORE vagy AFTER).
A Triggerek Típusai
- INSERT Trigger: Akkor fut le, amikor egy új rekordot szúrnak be a táblába.
- UPDATE Trigger: Akkor fut le, amikor egy rekordot frissítenek.
- DELETE Trigger: Akkor fut le, amikor egy rekordot törölnek a táblából.
Az időzítés szerint a triggerek lehetnek:
- BEFORE Trigger: A művelet előtt fut le.
- AFTER Trigger: A művelet után fut le.
Trigger Létrehozása
A triggerek létrehozásához a CREATE TRIGGER
parancsot használjuk. Az alábbiakban bemutatjuk a triggerek létrehozásának szintaxisát és néhány példát.
Szintaxis
CREATE TRIGGER trigger_nev
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON tabla_nev
FOR EACH ROW
BEGIN
-- Trigger test
END;
Példák
BEFORE INSERT Trigger
Ez a trigger ellenőrzi, hogy a beszúrandó rekord fizetése nem negatív-e, és hibát jelez, ha az érték negatív.
CREATE TRIGGER ellenoriz_fizetes
BEFORE INSERT ON alkalmazottak
FOR EACH ROW
BEGIN
IF NEW.fizetes < 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'A fizetés nem lehet negatív!';
END IF;
END;
AFTER INSERT Trigger
Ez a trigger naplózza az új rendelések beszúrását egy külön napló táblába.
CREATE TABLE rendeles_naplo (
id INT AUTO_INCREMENT PRIMARY KEY,
rendeles_id INT,
datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER naplozza_uj_rendelest
AFTER INSERT ON rendelesek
FOR EACH ROW
BEGIN
INSERT INTO rendeles_naplo (rendeles_id) VALUES (NEW.id);
END;
BEFORE UPDATE Trigger
Ez a trigger ellenőrzi, hogy az alkalmazott fizetése nem csökkenhet egy bizonyos mérték alá frissítéskor.
CREATE TRIGGER ellenoriz_fizetes_update
BEFORE UPDATE ON alkalmazottak
FOR EACH ROW
BEGIN
IF NEW.fizetes < OLD.fizetes * 0.9 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'A fizetés nem csökkenhet 10%-nál többel!';
END IF;
END;
AFTER DELETE Trigger
Ez a trigger naplózza a törölt rekordokat egy törlési napló táblába.
CREATE TABLE torlesi_naplo (
id INT AUTO_INCREMENT PRIMARY KEY,
felhasznalo_id INT,
torles_datuma TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER naplozza_torleseket
AFTER DELETE ON felhasznalok
FOR EACH ROW
BEGIN
INSERT INTO torlesi_naplo (felhasznalo_id) VALUES (OLD.id);
END;
Triggerek Használatának Legjobb Gyakorlatai
- Minimalizáljuk a Trigger Logikát: A triggerek futásidejének minimalizálása érdekében tartsuk a trigger logikát egyszerűnek és gyorsnak.
- Kerüljük a Hosszú Lekérdezéseket: Kerüljük a triggerekben hosszú lekérdezések futtatását, hogy minimalizáljuk a lezárási problémákat.
- Használjunk Triggerek Helyett Tárolt Eljárásokat, ha Lehetséges: Ha a trigger logika összetett, fontoljuk meg tárolt eljárások használatát.
- Dokumentáljuk a Triggereket: Részletesen dokumentáljuk a triggerek működését és célját a későbbi karbantartás és hibaelhárítás megkönnyítése érdekében.