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

  1. INSERT Trigger: Akkor fut le, amikor egy új rekordot szúrnak be a táblába.
  2. UPDATE Trigger: Akkor fut le, amikor egy rekordot frissítenek.
  3. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.