Trigger
Trigger in Datenbanken sind spezielle Arten von gespeicherten Prozeduren, die automatisch ausgeführt oder ausgelöst werden, wenn bestimmte Ereignisse oder Aktionen in der Datenbank auftreten.
Diese Ereignisse können das Einfügen, Aktualisieren oder Löschen von Daten in Tabellen sowie Änderungen an Datenbankschemaobjekten wie Tabellen oder Sichten umfassen.
DML-Trigger
Ein DML-Trigger, auch bekannt als Data Manipulation Language Trigger, ist ein Datenbankobjekt, das automatisch eine festgelegte Aktion ausführt, wenn ein bestimmtes Ereignis auf einer Tabelle oder Sicht eintritt.
DML-Trigger werden häufig verwendet, um Geschäftsregeln durchzusetzen, Datenintegrität zu gewährleisten oder Prüfaufgaben durchzuführen.
Arten von DML-Triggern
- After Trigger: Diese Trigger werden nach der auslösenden Aktion (Einfügen, Aktualisieren, Löschen) auf der Tabelle ausgeführt;
- Before Trigger: Diese Trigger werden vor der auslösenden Aktion ausgeführt. Sie ermöglichen es, die ursprüngliche Aktion abzufangen und benutzerdefinierte Logik auszuführen, bevor entschieden wird, ob die ursprüngliche Aktion fortgesetzt werden soll.
Beispiel für einen After Trigger
Wir haben zuvor ein Beispiel untersucht, bei dem eine Transaktion verwendet wurde, um Werte als eine logische Einheit in die Tabelle BankAccounts und die Tabelle UserLogs einzufügen.
Nun können wir dies anstelle einer Transaktion erreichen, indem wir einen AFTER-Trigger für die INSERT-Operation in der Tabelle BankAccounts erstellen.
Dadurch können wir nur neue Konten einfügen, und der entsprechende Log-Eintrag wird automatisch durch den Trigger hinzugefügt.
12345678910111213141516-- Create an after-insert trigger for UserLogs CREATE FUNCTION after_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Perform some action, like logging the insert INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder)); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Attach the trigger to the BankAccounts table CREATE TRIGGER after_insert_trigger AFTER INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE after_insert_trigger_function();
In PostgreSQL-Triggern ist NEW eine spezielle Datensatzvariable, die die neu eingefügte oder aktualisierte Zeile in der Tabelle repräsentiert. Sie ermöglicht den Zugriff auf die Werte der Spalten der neuen Zeile innerhalb der Triggerfunktion.
Wenn mit gelöschten Zeilen gearbeitet wird, muss stattdessen die Datensatzvariable OLD verwendet werden, anstelle von NEW.
Beispiel für einen Before-Trigger
Angenommen, wir möchten das Hinzufügen von Werten mit einem negativen Kontostand verhindern. Wir können dazu einen BEFORE-Trigger erstellen. Dieser Trigger prüft den Kontostand vor der Operation und wenn dieser negativ ist, wird die Operation nicht ausgeführt.
12345678910111213141516171819202122232425-- Create the trigger function CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Check if the account balance is less than 0 IF (NEW.balance < 0) THEN -- If balance is less than 0, do nothing and return RAISE NOTICE 'Balance is less than 0. Action not logged.'; ELSE -- If balance is greater than or equal to 0, log the action RAISE NOTICE 'Logging insert into UserLogs'; -- Inserting into the UserLogs table INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder)); END IF; -- Indicate that the trigger function has completed successfully RETURN NULL; END; $$ LANGUAGE plpgsql; -- Create the trigger CREATE TRIGGER before_insert_trigger BEFORE INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE before_insert_trigger_function();
Muster zur Trigger-Erstellung
Wir erkennen das typische Muster zur Erstellung von Triggern: Zunächst definieren wir eine Funktion, die spezifische Logik vor oder nach einer Operation ausführt. Anschließend verknüpfen wir diese Funktion als Trigger mit einer bestimmten Tabelle und Aktion.
Beachten Sie, dass in der Anweisung:
CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;
wir die Flexibilität haben, UPDATE oder DELETE anstelle der INSERT-Operation zu verwenden.
Beachten Sie jedoch, dass keine SELECT-Trigger erstellt werden können, da die SELECT-Anweisung keine Zeilen in der Tabelle verändert!
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain the difference between AFTER and BEFORE triggers in more detail?
What are some common use cases for DML triggers in real-world applications?
How can I modify a trigger to handle UPDATE or DELETE operations instead of INSERT?
Awesome!
Completion rate improved to 4.55
Trigger
Swipe um das Menü anzuzeigen
Trigger in Datenbanken sind spezielle Arten von gespeicherten Prozeduren, die automatisch ausgeführt oder ausgelöst werden, wenn bestimmte Ereignisse oder Aktionen in der Datenbank auftreten.
Diese Ereignisse können das Einfügen, Aktualisieren oder Löschen von Daten in Tabellen sowie Änderungen an Datenbankschemaobjekten wie Tabellen oder Sichten umfassen.
DML-Trigger
Ein DML-Trigger, auch bekannt als Data Manipulation Language Trigger, ist ein Datenbankobjekt, das automatisch eine festgelegte Aktion ausführt, wenn ein bestimmtes Ereignis auf einer Tabelle oder Sicht eintritt.
DML-Trigger werden häufig verwendet, um Geschäftsregeln durchzusetzen, Datenintegrität zu gewährleisten oder Prüfaufgaben durchzuführen.
Arten von DML-Triggern
- After Trigger: Diese Trigger werden nach der auslösenden Aktion (Einfügen, Aktualisieren, Löschen) auf der Tabelle ausgeführt;
- Before Trigger: Diese Trigger werden vor der auslösenden Aktion ausgeführt. Sie ermöglichen es, die ursprüngliche Aktion abzufangen und benutzerdefinierte Logik auszuführen, bevor entschieden wird, ob die ursprüngliche Aktion fortgesetzt werden soll.
Beispiel für einen After Trigger
Wir haben zuvor ein Beispiel untersucht, bei dem eine Transaktion verwendet wurde, um Werte als eine logische Einheit in die Tabelle BankAccounts und die Tabelle UserLogs einzufügen.
Nun können wir dies anstelle einer Transaktion erreichen, indem wir einen AFTER-Trigger für die INSERT-Operation in der Tabelle BankAccounts erstellen.
Dadurch können wir nur neue Konten einfügen, und der entsprechende Log-Eintrag wird automatisch durch den Trigger hinzugefügt.
12345678910111213141516-- Create an after-insert trigger for UserLogs CREATE FUNCTION after_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Perform some action, like logging the insert INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder)); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Attach the trigger to the BankAccounts table CREATE TRIGGER after_insert_trigger AFTER INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE after_insert_trigger_function();
In PostgreSQL-Triggern ist NEW eine spezielle Datensatzvariable, die die neu eingefügte oder aktualisierte Zeile in der Tabelle repräsentiert. Sie ermöglicht den Zugriff auf die Werte der Spalten der neuen Zeile innerhalb der Triggerfunktion.
Wenn mit gelöschten Zeilen gearbeitet wird, muss stattdessen die Datensatzvariable OLD verwendet werden, anstelle von NEW.
Beispiel für einen Before-Trigger
Angenommen, wir möchten das Hinzufügen von Werten mit einem negativen Kontostand verhindern. Wir können dazu einen BEFORE-Trigger erstellen. Dieser Trigger prüft den Kontostand vor der Operation und wenn dieser negativ ist, wird die Operation nicht ausgeführt.
12345678910111213141516171819202122232425-- Create the trigger function CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Check if the account balance is less than 0 IF (NEW.balance < 0) THEN -- If balance is less than 0, do nothing and return RAISE NOTICE 'Balance is less than 0. Action not logged.'; ELSE -- If balance is greater than or equal to 0, log the action RAISE NOTICE 'Logging insert into UserLogs'; -- Inserting into the UserLogs table INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder)); END IF; -- Indicate that the trigger function has completed successfully RETURN NULL; END; $$ LANGUAGE plpgsql; -- Create the trigger CREATE TRIGGER before_insert_trigger BEFORE INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE before_insert_trigger_function();
Muster zur Trigger-Erstellung
Wir erkennen das typische Muster zur Erstellung von Triggern: Zunächst definieren wir eine Funktion, die spezifische Logik vor oder nach einer Operation ausführt. Anschließend verknüpfen wir diese Funktion als Trigger mit einer bestimmten Tabelle und Aktion.
Beachten Sie, dass in der Anweisung:
CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;
wir die Flexibilität haben, UPDATE oder DELETE anstelle der INSERT-Operation zu verwenden.
Beachten Sie jedoch, dass keine SELECT-Trigger erstellt werden können, da die SELECT-Anweisung keine Zeilen in der Tabelle verändert!
Danke für Ihr Feedback!