MySQL Grundlagen: Trigger
Trigger sind spezielle gespeicherte Prozeduren in Datenbanken, die automatisch ausgeführt werden, wenn bestimmte Ereignisse eintreten, wie zum Beispiel das Einfügen, Aktualisieren oder Löschen von Datensätzen. In MySQL sind Trigger ein wirksames Mittel zur Wahrung der Datenbankintegrität, für Datenprüfungen und zur Ausführung automatisierter Datenverwaltungsoperationen. In diesem Beitrag überblicken wir die Funktionsweise von Triggern, ihre Typen und die besten Praktiken ihrer Verwendung.
Was ist ein Trigger?
Ein Trigger ist eine Prozedur, die automatisch ausgeführt wird, wenn in einer bestimmten Tabelle ein festgelegtes Ereignis eintritt. Die zwei Hauptbestandteile eines Triggers sind der Operationstyp (INSERT, UPDATE, DELETE) und der Zeitpunkt (BEFORE oder AFTER).
Die Typen von Triggern
- INSERT-Trigger: Wird ausgeführt, wenn ein neuer Datensatz in die Tabelle eingefügt wird.
- UPDATE-Trigger: Wird ausgeführt, wenn ein Datensatz aktualisiert wird.
- DELETE-Trigger: Wird ausgeführt, wenn ein Datensatz aus der Tabelle gelöscht wird.
Nach dem Zeitpunkt können Trigger sein:
- BEFORE-Trigger: Wird vor der Operation ausgeführt.
- AFTER-Trigger: Wird nach der Operation ausgeführt.
Erstellen eines Triggers
Zum Erstellen von Triggern verwenden wir den Befehl CREATE TRIGGER. Im Folgenden zeigen wir die Syntax zum Erstellen von Triggern und einige Beispiele.
Syntax
CREATE TRIGGER trigger_nev
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON tabla_nev
FOR EACH ROW
BEGIN
-- Trigger-Test
END;
Beispiele
BEFORE INSERT-Trigger
Dieser Trigger prüft, ob das Gehalt des einzufügenden Datensatzes nicht negativ ist, und gibt einen Fehler aus, wenn der Wert negativ ist.
CREATE TRIGGER ellenoriz_fizetes
BEFORE INSERT ON alkalmazottak
FOR EACH ROW
BEGIN
IF NEW.fizetes < 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Das Gehalt darf nicht negativ sein!';
END IF;
END;
AFTER INSERT-Trigger
Dieser Trigger protokolliert das Einfügen neuer Bestellungen in eine separate Protokolltabelle.
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
Dieser Trigger prüft, dass das Gehalt des Mitarbeiters bei einer Aktualisierung nicht unter einen bestimmten Betrag sinken darf.
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 = 'Das Gehalt darf nicht um mehr als 10 % sinken!';
END IF;
END;
AFTER DELETE-Trigger
Dieser Trigger protokolliert die gelöschten Datensätze in eine Löschprotokoll-Tabelle.
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;
Best Practices für die Verwendung von Triggern
- Trigger-Logik minimieren: Um die Laufzeit der Trigger zu minimieren, halten Sie die Trigger-Logik einfach und schnell.
- Lange Abfragen vermeiden: Vermeiden Sie die Ausführung langer Abfragen in Triggern, um Sperrprobleme zu minimieren.
- Wenn möglich, gespeicherte Prozeduren statt Triggern verwenden: Wenn die Trigger-Logik komplex ist, ziehen Sie die Verwendung gespeicherter Prozeduren in Betracht.
- Trigger dokumentieren: Dokumentieren Sie die Funktionsweise und den Zweck der Trigger ausführlich, um die spätere Wartung und Fehlerbehebung zu erleichtern.