Trigger: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Bastian (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(17 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{In Bearbeitung}}
{{Eingereicht zur Überprüfung}}


==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.


=Definition=
==Vorteile==
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 oder Löschung von Daten, ausgelöst.
*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)


=Vorteile=
==Möglichkeiten von Triggern==
- Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen, die möglicherweise noch im System verbleiben könnten.
*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
- Bestimmte Hinweise oder Vorgänge anzeigen bzw. auszuführen
*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=
==Implementierung von Triggern==
==Bemerkung 1==
===Allgemein===
Zu einer Definition kann man viele sinnvolle Bemerkungen angeben.
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.
Dadurch entsteht die Möglichkeit ein Programm aus einer anderen Programmiersprache zu verwenden,


=Beispiele=
===Syntax===
==Automatisches Füllen von Datenbankfelder==
''Anlegen eines Triggers''
<source lang="sql">
CREATE TRIGGER triggername
[BEFORE | AFTER] [ INSERT | DELETE | UPDATE [OR ...] ]
ON tablename FOR EACH ROW
EXECUTE PROCEDURE functionname [(args)];
</source>


''Löschen eines Triggers''
<source lang="sql">
DROP TRIGGER triggername
</source>


==Automatischen INSERT anhand einer bestimmten Anzahl==
==Beispiele==
Beispiele machen sich auch nicht schlecht.
==Automatische Sicherung von Inhalten einer Tabelle in eine zweite Tabelle==
'''1. Schritt: Erstellung einer Tabelle'''


=Quellen=
<source lang="sql">
CREATE TABLE tabelle1
(
        id        integer primary key,
        name      varchar(40) not null,
        telefon    varchar(10),
        umsatz    decimal(10,2)
);
</source>


*[[Throll, M.; Bartosch, O. (2005): Einstieg in SQL]]
''Erklärung'': Anlegen der Tabelle.


'''2. Schritt: Erstellung der Sicherungstabelle'''


Auch externe Quellen können zitiert werden.
<source lang="sql">
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)
);
</source>


*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke] (besser als eigenes Quellen-Dokument, basierend auf der [[Vorlage:Quelle:URL]])
''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.
*[http://de.wikipedia.org/ Wikipedia] ('''so nicht''', da zu allgemein und außerdem nicht der Wikipedia-Verweis benutzt wurde)
*[[Wikipedia:Vorlage (Datenverarbeitung)]] (sondern eher so, aber noch besser auch als eigenes Quellen-Dokument)


=Siehe auch=
'''3. Schritt: Erstellung einer Funktion für die automatische Sicherung'''
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.


*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)
<source lang="sql">
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]
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’
</source>


''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'''
<source lang="sql">
CREATE TRIGGER backup_tabelle1
AFTER DELETE OR UPDATE
ON tabelle1
FOR EACH ROW
EXECUTE PROCEDURE backup_tabelle1();
</source>
''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==
*[[Throll, M.; Bartosch, O. (2007): Einstieg in SQL]]
*[[Eisentraut, P. (2003): PostgreSQL - Das offizielle Handbuch]]
*[[Douglas, K.; Douglas S (2003): PostgreSQL]]
*[http://de.wikipedia.org/wiki/Datenbanktrigger]
*[http://www.dbmsmag.com/9605d17.html]
[[Kategorie:SQL]]
[[Kategorie:Glossar]]
[[Kategorie:Glossar]]
[[Kategorie:GlossarWiki]]
[[en:GlossaryWiki:Sample Page]]

Aktuelle Version vom 23. Mai 2019, 16: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,

Quellen