Trigger: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Eingereicht zur Überprüfung}} | {{Eingereicht zur Überprüfung}} | ||
==Definition== | |||
=Definition= | |||
In Datenbanken ist es neben der Speicherung und Abfrage von Daten auch möglich Logik selbst zu implementieren. Trigger gehören zum Bereich Logik und werden automatisch bei bestimmten Ereignissen, wie UPDATE, INSERT oder DELETE von Daten, ausgelöst. | In Datenbanken ist es neben der Speicherung und Abfrage von Daten auch möglich Logik selbst zu implementieren. Trigger gehören zum Bereich Logik und werden automatisch bei bestimmten Ereignissen, wie UPDATE, INSERT oder DELETE von Daten, ausgelöst. | ||
=Vorteile= | ==Vorteile== | ||
*Trigger lösen automatisch aus; Der Benutzer muss sich nicht über weitere Vorgänge des Updates Gedanken machen (Fehlervermeidung) | *Trigger lösen automatisch aus; Der Benutzer muss sich nicht über weitere Vorgänge des Updates Gedanken machen (Fehlervermeidung) | ||
*Trigger können Bedingungen bei INSERT, UPDATE oder DELETE Befehlen überprüfen | *Trigger können Bedingungen bei INSERT, UPDATE oder DELETE Befehlen überprüfen | ||
Zeile 13: | Zeile 12: | ||
*Trigger können den Client-Serververkehr entlasten | *Trigger können den Client-Serververkehr entlasten | ||
=Nachteile & Warnungen= | ==Nachteile & Warnungen== | ||
*Trigger können in sich wiederum Trigger auslösen (Belastung des Datenbanksystems) | *Trigger können in sich wiederum Trigger auslösen (Belastung des Datenbanksystems) | ||
*Debuggen wird erschwert, weil Statements in Triggern nicht beim Debuggen aufgeführt werden | *Debuggen wird erschwert, weil Statements in Triggern nicht beim Debuggen aufgeführt werden | ||
Zeile 20: | Zeile 19: | ||
*Festlegung, wie oft ein Trigger ausgeführt werden soll (Entlastung des Datenbanksystems) | *Festlegung, wie oft ein Trigger ausgeführt werden soll (Entlastung des Datenbanksystems) | ||
==Möglichkeiten von Triggern== | |||
=Möglichkeiten von Triggern= | |||
*Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen | *Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen | ||
*Protokollerstellung bei einem Löschvorgang | *Protokollerstellung bei einem Löschvorgang | ||
Zeile 27: | Zeile 25: | ||
*Auslösung von Vorgängen bei einem bestimmten Fall (z.B.: Mitgliederzahl über 100) | *Auslösung von Vorgängen bei einem bestimmten Fall (z.B.: Mitgliederzahl über 100) | ||
==Implementierung von Triggern== | |||
=Implementierung von Triggern= | ===Allgemein=== | ||
==Allgemein== | |||
Für die Erstellung von Triggern werden spezielle Programmiersprachen (PL/SQL oder SQL PL) verwendet. | Für die Erstellung von Triggern werden spezielle Programmiersprachen (PL/SQL oder SQL PL) verwendet. | ||
Außerdem ist es in einigen Datenbanksystemen möglich, in Triggern auch [[Stored Procedure]]s aufzurufen. | Außerdem ist es in einigen Datenbanksystemen möglich, in Triggern auch [[Stored Procedure]]s aufzurufen. | ||
Dadurch entsteht die Möglichkeit ein Programm aus einer anderen Programmiersprache zu verwenden, | Dadurch entsteht die Möglichkeit ein Programm aus einer anderen Programmiersprache zu verwenden, | ||
==Syntax== | ===Syntax=== | ||
''Anlegen eines Triggers'' | ''Anlegen eines Triggers'' | ||
<source lang="sql"> | <source lang="sql"> | ||
Zeile 48: | Zeile 45: | ||
</source> | </source> | ||
=Beispiele= | ==Beispiele== | ||
==Automatische Sicherung von Inhalten einer Tabelle in eine zweite Tabelle== | ==Automatische Sicherung von Inhalten einer Tabelle in eine zweite Tabelle== | ||
'''1. Schritt: Erstellung einer Tabelle''' | '''1. Schritt: Erstellung einer Tabelle''' | ||
Zeile 63: | Zeile 60: | ||
''Erklärung'': Anlegen der Tabelle. | ''Erklärung'': Anlegen der Tabelle. | ||
'''2. Schritt: Erstellung der Sicherungstabelle''' | '''2. Schritt: Erstellung der Sicherungstabelle''' | ||
Zeile 82: | Zeile 77: | ||
''Erklärung'': Anlegen der Sicherungstabelle mit den gleichen Spalten aus der Haupttabelle und zusätzlichen Spalten, die das Datum, die vorgenommene Änderung und User speichern. | ''Erklärung'': Anlegen der Sicherungstabelle mit den gleichen Spalten aus der Haupttabelle und zusätzlichen Spalten, die das Datum, die vorgenommene Änderung und User speichern. | ||
'''3. Schritt: Erstellung einer Funktion für die automatische Sicherung''' | '''3. Schritt: Erstellung einer Funktion für die automatische Sicherung''' | ||
Zeile 107: | Zeile 100: | ||
''Erklärung'': Die Funktion backup_tabelle1() nimmt die nicht mehr aktuellen Werte aus tabelle1 und speichert sie in der tabelle1_backup als eine neue Zeile. | ''Erklärung'': Die Funktion backup_tabelle1() nimmt die nicht mehr aktuellen Werte aus tabelle1 und speichert sie in der tabelle1_backup als eine neue Zeile. | ||
'''4. Erstellung des Triggers''' | '''4. Erstellung des Triggers''' | ||
Zeile 122: | Zeile 113: | ||
''Erklärung'': Der Trigger wird erstellt und nach jedem DELETE oder UPDATE Befehl der auf die tabelle1 ausgeführt wird, ruft er die Funktion backup_tabelle1() auf, | ''Erklärung'': Der Trigger wird erstellt und nach jedem DELETE oder UPDATE Befehl der auf die tabelle1 ausgeführt wird, ruft er die Funktion backup_tabelle1() auf, | ||
=Quellen= | ==Quellen== | ||
*[[Throll, M.; Bartosch, O. ( | *[[Throll, M.; Bartosch, O. (2007): Einstieg in SQL]] | ||
*[[Eisentraut, P. (2003): PostgreSQL - Das offizielle Handbuch]] | *[[Eisentraut, P. (2003): PostgreSQL - Das offizielle Handbuch]] | ||
*[[Douglas, K.; Douglas S (2003): PostgreSQL]] | *[[Douglas, K.; Douglas S (2003): PostgreSQL]] |
Aktuelle Version vom 23. Mai 2019, 17:25 Uhr
Dieser Artikel sollte auf Korrektheit, Quellenangaben und GlossarWiki-Konformität hin überprüft werden.
Definition
In Datenbanken ist es neben der Speicherung und Abfrage von Daten auch möglich Logik selbst zu implementieren. Trigger gehören zum Bereich Logik und werden automatisch bei bestimmten Ereignissen, wie UPDATE, INSERT oder DELETE von Daten, ausgelöst.
Vorteile
- Trigger lösen automatisch aus; Der Benutzer muss sich nicht über weitere Vorgänge des Updates Gedanken machen (Fehlervermeidung)
- Trigger können Bedingungen bei INSERT, UPDATE oder DELETE Befehlen überprüfen
- Trigger werden einmal für eine bestimmte Tabelle und Aufgabe implementiert
- Trigger können in sich wiederum Trigger auslösen.
- Trigger werden direkt im Datenbanksystemaufgerufen
- Trigger können den Client-Serververkehr entlasten
Nachteile & Warnungen
- Trigger können in sich wiederum Trigger auslösen (Belastung des Datenbanksystems)
- Debuggen wird erschwert, weil Statements in Triggern nicht beim Debuggen aufgeführt werden
- Mächtigkeit der Trigger fordert eine sehr gute Implementierung.
- Fehlerhafte Trigger können Datenbestände beschädigen oder unbrauchbar machen
- Festlegung, wie oft ein Trigger ausgeführt werden soll (Entlastung des Datenbanksystems)
Möglichkeiten von Triggern
- Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen
- Protokollerstellung bei einem Löschvorgang
- Sicherung von Daten in eine Sicherungstabelle (s. Beispiel)
- Auslösung von Vorgängen bei einem bestimmten Fall (z.B.: Mitgliederzahl über 100)
Implementierung von Triggern
Allgemein
Für die Erstellung von Triggern werden spezielle Programmiersprachen (PL/SQL oder SQL PL) verwendet. Außerdem ist es in einigen Datenbanksystemen möglich, in Triggern auch Stored Procedures aufzurufen. Dadurch entsteht die Möglichkeit ein Programm aus einer anderen Programmiersprache zu verwenden,
Syntax
Anlegen eines Triggers
CREATE TRIGGER triggername
[BEFORE | AFTER] [ INSERT | DELETE | UPDATE [OR ...] ]
ON tablename FOR EACH ROW
EXECUTE PROCEDURE functionname [(args)];
Löschen eines Triggers
DROP TRIGGER triggername
Beispiele
Automatische Sicherung von Inhalten einer Tabelle in eine zweite Tabelle
1. Schritt: Erstellung einer Tabelle
CREATE TABLE tabelle1
(
id integer primary key,
name varchar(40) not null,
telefon varchar(10),
umsatz decimal(10,2)
);
Erklärung: Anlegen der Tabelle.
2. Schritt: Erstellung der Sicherungstabelle
CREATE TABLE tabelle1_backup
(
id integer primary key,
name varchar(40) not null,
telefon varchar(10),
umsatz decimal(10,2)
user_changed varchar(40),
date_changed date,
operation varchar(15)
);
Erklärung: Anlegen der Sicherungstabelle mit den gleichen Spalten aus der Haupttabelle und zusätzlichen Spalten, die das Datum, die vorgenommene Änderung und User speichern.
3. Schritt: Erstellung einer Funktion für die automatische Sicherung
CREATE FUNCTION backup_tabelle1() RETURNS OPAQUE AS ‘
BEGIN
INSERT INTO tabelle1_backup
VALUES
(
OLD.id,
OLD.name,
OLD.telefon,
OLD.umsatz,
CURRENT_USER,
now(),
TG_OP
);
RETURN NULL;
END;
‘ LANGUAGE ‘plpgsql’
Erklärung: Die Funktion backup_tabelle1() nimmt die nicht mehr aktuellen Werte aus tabelle1 und speichert sie in der tabelle1_backup als eine neue Zeile.
4. Erstellung des Triggers
CREATE TRIGGER backup_tabelle1
AFTER DELETE OR UPDATE
ON tabelle1
FOR EACH ROW
EXECUTE PROCEDURE backup_tabelle1();
Erklärung: Der Trigger wird erstellt und nach jedem DELETE oder UPDATE Befehl der auf die tabelle1 ausgeführt wird, ruft er die Funktion backup_tabelle1() auf,