Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Both sides previous revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
db:mysql:trigger [2018/11/17 18:07] webproducer Tabelle für Trigger-Ereignisse erstellt (Aliase ergänzt) |
db:mysql:trigger [2018/11/17 21:46] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Datenbank-Trigger in MySQL ====== | ====== Datenbank-Trigger in MySQL ====== | ||
- | Ein Datenbank-Trigger ist eine automatische Funktion, die in MySQL durch die folgenden Ereignisse angestoßen werden kann: | + | Ein Datenbank-Trigger ist eine automatische Funktion, die in MySQL durch ein Ereignisse angestoßen werden kann. Der Vorteil ist, dass diese Funktionen bereits auf Datenbankebene automatisiert ausgeführt werden und der Entwickler sich die aufwändigere Programmierung im Programmcode sparen kann. Dadurch kann der Funktionsaufruf an keiner Stelle vergessen werden. |
^ Ereignis ^ Beschreibungstext ^ Alias OLD ^ Alias NEW ^ | ^ Ereignis ^ Beschreibungstext ^ Alias OLD ^ Alias NEW ^ | ||
Zeile 11: | Zeile 11: | ||
| DELETE AFTER | Nach dem Löschen eines bestehenden Datensatzes | X | - | | | DELETE AFTER | Nach dem Löschen eines bestehenden Datensatzes | X | - | | ||
- | Um innerhalb des Triggers auf die Werte des alten und neuen Datensatzes zugreifen zu können stehen (je nach Ereignis) die Aliase "OLD" und "NEW" zur verfügung. | + | Um innerhalb des Triggers auf die Werte des alten und neuen Datensatzes zugreifen zu können stehen (je nach Ereignis) die Aliase "OLD" und "NEW" zur Verfügung. |
+ | |||
+ | ---- | ||
==== Beispiel 1: Automatisches Update vom Kontostand beim Einfügen eines neuen Buchungssatzes ==== | ==== Beispiel 1: Automatisches Update vom Kontostand beim Einfügen eines neuen Buchungssatzes ==== | ||
+ | |||
+ | Damit der Kontostand des Mitspielers nicht bei jedem Seitenaufruf neu berechnet werden muss kann dieser bei jeder Änderung automatisch aktualisiert werden. So muss beim späteren Select nur ein Datenbankfeld ausgelesen werden. Das bringt Geschwindigkeitsvorteile beim Seitenaufruf. | ||
<code sql> | <code sql> | ||
Zeile 24: | Zeile 28: | ||
Bei jedem Einfügen eines neuen Datensatzes in die Tabelle "Buchungen" wird der das Feld "Kontostand" in der Tabelle "Mitspieler" automatisch aktualisiert. Das Schlüsselwort "NEW" stellt in diesem Kontext den neu angelegten Datensatz in der Tabelle "Buchungen" dar. | Bei jedem Einfügen eines neuen Datensatzes in die Tabelle "Buchungen" wird der das Feld "Kontostand" in der Tabelle "Mitspieler" automatisch aktualisiert. Das Schlüsselwort "NEW" stellt in diesem Kontext den neu angelegten Datensatz in der Tabelle "Buchungen" dar. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Beispiel 2: Automatischer Log-Eintrag bei Statusänderung eines Mitspielers ==== | ||
+ | |||
+ | In diesem Beispiel wird der Trigger nur ausgeführt, wenn die Bedingung der IF-Anweisung (Status hat sich geändert) zutrifft. | ||
+ | |||
+ | <code sql> | ||
+ | CREATE TRIGGER CreateLogeintrag AFTER INSERT ON Mitspieler | ||
+ | FOR EACH ROW | ||
+ | IF OLD.Status != NEW.Status THEN BEGIN | ||
+ | INSERT INTO Log ( Ereignis, old_value, new_value, Mitspieler ) VALUES ( 'Statusänderung', OLD.Status, NEW.Status, NEW.ID ); | ||
+ | END; END IF; | ||
+ | </code> | ||
+ | |||
+ | Wenn der Status vom vorherigen Datensatz (OLD) vom Status nach der Änderung (NEW) abweicht wird in der Tabelle "Log" ein neuer Datensatz erzeugt |