SQL-CREATE TRIGGER
Ist eine Funktion des DBMS, welche bei Änderung von Daten in einer Tabelle aufgerufen wird, das diese Änderung erlaubt, verhindert und/oder weitere Tätigkeiten vornimmt. Trigger werden zur Wahrung Datenkonsistenz (Intergritätsüberprüfungen) und zum Einfügen, Löschen oder Ändern von Referendaren eingesetzt.
- Trigger sind die Konstrukte, die als Reaktion auf bestimmte Ereignisse in einer bestimmten Tabelle automatisch ausgeführt werden.
- Trigger werden verwendet, um die Integrität der Daten zu erhalten.
- Ein Trigger ist eine in der Datenbank gespeicherte Prozedur, die nach
INSERT-,UPDATE- oderDELETE-Anweisungen automatisch angestoßen wird. - Ein Trigger in SQL funktioniert ähnlich wie ein Trigger in der realen Welt: wenn Abzug betätigt, wird Kugel abgefeuert.
- Grundbaustein zum Erzeugen von Trigger
CREATE TRIGGER Trigger_Name
(Before | After) [Insert | Update | Delete]
on [Table_Name]
[ for each row | for each column]
[ trigger_body ]
Trigger_Name- der Name kann frei gewählt werden und muss im Datenbankschema eindeutig sein. Er sollte zudem jedoch einen Bezug zu den beteiligten Tabellen und der Funktionsweise erkennen lassen, denn der Trigger_Name wird bei Fehlermeldungen mit angezeigt.BEFORE | AFTER- der Ausführungszeitpunkt legt fest, ob ein Trigger vor oder nach dem feuernden (aktivierenden) Ereignis ausgeführt werden soll.INSERT | DELETE | UPDATE- ein Trigger kann nur zu einem einzigen Ereignis programmiert werden.on [Table_Name]- Der Tabellenname ist der Name einer Basistabelle. Trigger auf Sichten oder temporäre Tabellen sind nicht erlaubt.for each row | for each column- die Klausel zur Bestimmung, ob ein zeilenorientierter oder ein spaltenorientierter Trigger erstellt wird gehört auch zum Ausführungszeitpunkt. Sie wird jeweils für jeden manipulierten Datensatz ausgeführt. Ist kein Datensatz von der DML-Anweisung betroffen, wird auch kein zeilenorientierter Trigger ausgeführt.trigger_body- der Aktionsteil enthält die Ausführungslogik, die ausgeführt werden soll, wenn das feuernde Ereignis eintritt.
Beispiele
- Wenn in der Tabelle Modul bestimmte Module gelöscht werden, sollten auch deren Tutorien in der Tabelle Tutorium gelöscht werden.
CREATE TRIGGER delete_tutorium
AFTER DELETE
ON Modul
FOR EACH ROW
BEGIN
DELETE FROM Tutorium
WHERE ModNr.Modul=ModNr.Tutorium;
END;
Automatische Löschung der Tutorien NACH DEM LÖSCHEN eines Moduls.
CREATE TABLE BESUCHT
( MATRNR INT(6) NOT NULL ,
MODNR CHAR(9) NOT NULL ,
NOTE DEC(2,1) ,
SEMESTER CHAR(6) ,
VERSUCH INT ,
PRIMARY KEY (MATRNR, MODNR) ,
FOREIGN KEY (MATRNR) REFERENCES STUDENT(MATRNR),
FOREIGN KEY (MODNR) REFERENCES MODUL(MODNR)
);
ALTER TABLE BESUCHT
ADD DATENBANKERSTELLUNG DEC(4,2) ,
DATENBANKABFRAGE DEC(4,2) ,
PROGRAMMIERAUFGABE DEC(4,2) ,
SCHRIFTLICHER_TEST DEC(4,2) ,
GESAMT DEC(5,2) ;
- Wenn in der Tabelle Besucht den Punktenzahl einer neuen Portfolioleistung eingetragen wird, aktualisiert sich auch das Gesamtergebnis.
CREATE TRIGGER TOTAL
BEFORE INSERT
ON
BESUCHT
FOR EACH ROW
SET new.GESAMT=
new.DATENBANKERSTELLUNG+
new.DATENBANKABFRAGE+
new.PROGRAMMIERAUFGABE+
new.SCHRIFTLICHER_TEST ;
Automatische Berechnung der Gesamtpunktenzahl VOR DEM EINSETZEN.