Trigger – Beispiele für MySQL

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

Links:
http://dev.mysql.com/doc/refman/5.1/de/triggers.html

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


*