Ein Trigger ist mit einer Tabelle verbunden und wird aktiviert, wenn für diese Tabelle ein bestimmtes Ereignis eintritt. Zur Ausführung von CREATE TRIGGER ist z. Z. das TRIGGER-Recht für die entspr. Tabelle erforderlich; für Versionen vor MySQL 5.1.6 braucht man für diese Operationen SUPER-Rechte (SUPER privilege) oder Root-Rechte. …
Beispiel 1:
Timestamps bei Erstellung und Änderung eines Datensatzes
CREATE TRIGGER `trigger1_create_timestamp` BEFORE INSERT ON `MeineTabelle` FOR EACH ROW SET NEW.TimeStamp_Create = NOW(); CREATE TRIGGER `trigger2_modified_timestamp` BEFORE UPDATE ON `MeineTabelle` FOR EACH ROW SET NEW.TimeStamp_Modify = NOW(); CREATE TRIGGER `trigger3_benutzer` BEFORE INSERT ON `MeineTabelle` FOR EACH ROW SET NEW.user = CURRENT_USER(); CREATE TRIGGER `trigger1_create` BEFORE INSERT ON `MeineTabelle` FOR EACH ROW BEGIN SET NEW.TimeStamp_Create = NOW(); SET NEW.user = CURRENT_USER(); END; CREATE TRIGGER `trigger2_modified` BEFORE UPDATE ON `MeineTabelle` FOR EACH ROW BEGIN SET NEW.TimeStamp_Modify = NOW(); SET NEW.User_Modify = CURRENT_USER(); END |
Beispiel 2:
Änderungshistorie
Der folgende Trigger „trigger_changes“ protokolliert Änderungen im Datenbestand einer Tabelle (tab1_aktuell) in eine zweite Tabelle (tab2_historie). Die Tabelle tab2_historie benötigt dabei den selben Satz an Feldern wie tab1_aktuell (ID, daten, daten1) sowie ein zusätzliches Feld für den Zeitpunkt der Änderung (date_modified). In der Protokolltabelle stehen dann alle Datensätze im Zustand vor ihrer Änderung.
CREATE TRIGGER trigger_changes AFTER UPDATE ON tab1_aktuell FOR EACH ROW INSERT INTO tab2_historie ( ID, daten 1, daten2, date_modified) VALUES (OLD.ID, OLD.daten, OLD.daten2, NOW()); |
Beispiel 3:
Setzt den Zeilenumbruch immer als CR + LF
Der folgende Trigger setzt in der MySQL-Datenbank – egal mit welcher Anwendung die Eingabe erfolgt – den Zeilenumbruch immer als Carriage Return (CR) & Linefeed (LF):
Datenbank: | MySQL |
Tabelle: | t_KONTAKTE |
Felder: | Anschrift_Post Anschrift_RG |
Trigger: | trigger_kontakte_created trigger_kontakte_modified |
Erläuterung:
Da der Zeilenumbruch sowohl beim Anlegen eines neuen Datensatzes als auch beim Ändern eines bestehenden Datensatzes als CR+LF ausgegeben werden soll, sind 2 Trigger erforderlich: INSERT und UPDATE
Trigger 1:
CREATE TRIGGER `trigger_kontakte_created` BEFORE INSERT ON `t_KONTAKTE` FOR EACH ROW BEGIN IF NEW.Anschrift_Post NOT LIKE "%rn%" THEN SET NEW.Anschrift_Post = REPLACE(NEW.Anschrift_Post,"r","rn"); END IF; IF NEW.Anschrift_RG NOT LIKE "%rn%" THEN SET NEW.Anschrift_RG = REPLACE(NEW.Anschrift_RG,"r","rn"); END IF; END |
Trigger 2:
CREATE TRIGGER `trigger_kontakte_modified` BEFORE UPDATE ON `t_KONTAKTE` FOR EACH ROW BEGIN IF NEW.Anschrift_Post NOT LIKE "%rn%" THEN SET NEW.Anschrift_Post = REPLACE(NEW.Anschrift_Post,"r","rn"); END IF; IF NEW.Anschrift_RG NOT LIKE "%rn%" THEN SET NEW.Anschrift_RG = REPLACE(NEW.Anschrift_RG,"r","rn"); END IF; END |