DAT-10-B-Trigger.pdf
Document Details
Uploaded by AdjustableNarwhal
2024
Tags
Full Transcript
Trigger SoSe 2024 1 Trigger ▪ Was ist ein Trigger? ▪ Ein Trigger ist eine Prozedur, die automatisch ausgeführt wird, wenn ein bestimmtes Ereignis für eine Tabelle oder Sicht eintritt ▪ Das Ereignis − kann z.B. eine Änderung von Daten sein (INSERT, UPDA...
Trigger SoSe 2024 1 Trigger ▪ Was ist ein Trigger? ▪ Ein Trigger ist eine Prozedur, die automatisch ausgeführt wird, wenn ein bestimmtes Ereignis für eine Tabelle oder Sicht eintritt ▪ Das Ereignis − kann z.B. eine Änderung von Daten sein (INSERT, UPDATE oder DELETE) − Auch DDL-Operationen können zur Auslösung eines Trigger genutzt werden (ALTER, CREATE oder DROP) ▪ Für den Trigger wird der Zeitpunkt der Ausführung festgelegt − BEFORE – vor dem Ereignis − AFTER – nach dem Ereignis (ein zu ändernder Wert kann ggf. noch modifiziert werden) − INSTEAD OF – alternative Ausführung ▪ Und es wird festgelegt, ob der Trigger ausgeführt wird − pro SQL-Befehl − oder pro geändertem Datensatz SoSe 2024 2 Trigger ▪ Erstellen eines Triggers DELIMITER // CREATE TRIGGER triggername {BEFORE|AFTER|INSTEAD OF} {INSERT|UPDATE|DELETE} ON tabellename [FOR EACH ROW] BEGIN … anweisungsblock … END // DELIMITER ; SoSe 2024 3 Trigger ▪ Erstellen eines Triggers Neuer Delimiter (Endekennzeichen) wird gesetzt DELIMITER // Trigger wird angelegt CREATE TRIGGER triggername {BEFORE|AFTER|INSTEAD OF} Wahl des Zeitpunkts der Ausführung {INSERT|UPDATE|DELETE} Wahl des Ereignisses ON tabellename Für welche Tabelle [FOR EACH ROW] [je Datensatz] sonst je SQL-Befehl BEGIN … anweisungsblock … Anweisungsblock begrenzt durch BEGIN und END END // DELIMITER ; Delimiter zurücksetzen SoSe 2024 4 Trigger ▪ Erstellen eines Triggers ▪ Die Prozedur des Triggers kann die selben Elemente enthalten, wie die Stored Procedures ▪ Zusätzlich kann man − Zugreifen auf alten Inhalt (bei UPDATE oder DELETE): OLD.datenfeldname − Zugreifen auf neuen Inhalt (bei INSERT oder UPDATE): NEW.datenfeldname SoSe 2024 5 Trigger ▪ Anwendungsbeispiel − Die Anwender benötigen häufig die Summe der Stückzahlen und Preise aller Artikel des Lagerbestandes in der Tabelle t_lager. − Die Werte berechnen Sie mit der Aggregatfunktion SUM(). − Bei jedem Aufruf der Funktion werden alle Datensätze durchlaufen und die Werte zeitaufwändig und rechenintensiv addiert. − Mit einem Trigger kann die Summe automatisch bei jedem Einfügen eines Datensatzes berechnet und in der zusätzlichen Tabelle t_summe_lager gespeichert werden. − Die Summe ist dort stets aktuell und schnell abrufbar. SoSe 2024 6 Trigger CREATE TABLE t_summe_lager (summe_stueck INTEGER, summe_preis FLOAT); DELIMITER // CREATE TRIGGER trig_summe_artikel AFTER INSERT ON t_lager FOR EACH ROW BEGIN DECLARE summe_stueck INTEGER; DECLARE summe_preis FLOAT; SELECT SUM(stueck), SUM(preis) FROM t_lager INTO summe_stueck, summe_preis; DELETE FROM t_summe_lager; INSERT INTO t_summe_lager VALUES(summe_stueck, summe_preis); END // DELIMITER ; SELECT * FROM t_summe_lager; INSERT INTO t_lager (id, stueck, preis) VALUES(56,10, 200); SELECT * FROM t_summe_lager; SoSe 2024 7 Trigger CREATE TABLE t_summe_lager Tabelle für Lagersumme (summe_stueck INTEGER, wird angelegt summe_preis FLOAT); DELIMITER // Neuer Delimiter wird gesetzt Trigger wird angelegt: Aktion soll nach einem INSERT in t_lager erfolgen CREATE TRIGGER trig_summe_artikel AFTER INSERT ON t_lager FOR EACH ROW BEGIN Ausführung für jeden Datensatz DECLARE summe_stueck INTEGER; Zwei lokale Variablen DECLARE summe_preis FLOAT; Gesamtstückzahl und Gesamtpreis des SELECT SUM(stueck), SUM(preis) FROM t_lager Lagers werden berechnet und in INTO summe_stueck, summe_preis; Variablen gespeichert DELETE FROM t_summe_lager; Einträge in t_summe_lager werden gelöscht INSERT INTO t_summe_lager VALUES(summe_stueck, summe_preis); END // Und auf die neuen Werte gesetzt DELIMITER ; Delimiter zurücksetzen SELECT * FROM t_summe_lager; Ausgabe der Lagersumme INSERT INTO t_lager (id, stueck, preis) Einfügen eines Datensatzes in lager VALUES(56,10, 200); SELECT * FROM t_summe_lager; Ausgabe der Lagersumme SoSe 2024 8 Trigger ▪ Einen Trigger bearbeiten ▪ Syntax ALTER TRIGGER triggername {BEFORE|AFTER} {INSERT|UPDATE|DELETE} … Anschließend abhängig von DBMS ▪ Einen Trigger löschen (in MySQL) DROP [tabellenname] triggername SoSe 2024 9