Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Trigger | Einige Zusätzliche Themen
Fortgeschrittene Techniken in SQL

bookTrigger

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 Datenbankschema-Objekten wie Tabellen oder Sichten umfassen.

Hinweis

Trigger können nicht explizit von Benutzern aufgerufen werden. Stattdessen werden sie automatisch als Reaktion auf die mit ihnen verknüpften Operationen ausgeführt.

DML-Trigger

Ein DML-Trigger (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 wird.

Beispiel für einen After Trigger

Wir haben zuvor ein Beispiel untersucht, bei dem eine Transaktion verwendet wurde, um Werte sowohl in die Tabelle BankAccounts als auch in die Tabelle UserLogs als eine logische Einheit einzufügen.
Nun können wir dies 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.

-- 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();

Hinweis

In PostgreSQL-Triggern ist NEW eine spezielle Record-Variable, die die neu eingefügte oder aktualisierte Zeile in der Tabelle darstellt. Sie ermöglicht den Zugriff auf die Werte der Spalten der neuen Zeile innerhalb der Triggerfunktion.
Wenn wir mit gelöschten Zeilen arbeiten, muss stattdessen die Record-Variable OLD anstelle von NEW verwendet werden.

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 verhindert die Ausführung, wenn der Wert negativ ist.

-- 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 Erstellung von Triggern

Das typische Muster zur Erstellung von Triggern lässt sich wie folgt beobachten: Zunächst wird eine Funktion definiert, die spezifische Logik vor oder nach einer Operation ausführt. Anschließend wird diese Funktion als Trigger einer bestimmten Tabelle und Aktion zugeordnet.

Beachten Sie bitte die folgende Anweisung:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

Hier besteht die Flexibilität, anstelle der UPDATE-Operation auch DELETE oder INSERT zu verwenden.
Beachten Sie jedoch, dass keine SELECT-Trigger erstellt werden können, da die SELECT-Anweisung keine Zeilen in der Tabelle verändert!

question mark

Was ist der Hauptzweck der Verwendung von Triggern in einer Datenbank?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

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 do I prevent unwanted actions using triggers in PostgreSQL?

Awesome!

Completion rate improved to 4.35

bookTrigger

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 Datenbankschema-Objekten wie Tabellen oder Sichten umfassen.

Hinweis

Trigger können nicht explizit von Benutzern aufgerufen werden. Stattdessen werden sie automatisch als Reaktion auf die mit ihnen verknüpften Operationen ausgeführt.

DML-Trigger

Ein DML-Trigger (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 wird.

Beispiel für einen After Trigger

Wir haben zuvor ein Beispiel untersucht, bei dem eine Transaktion verwendet wurde, um Werte sowohl in die Tabelle BankAccounts als auch in die Tabelle UserLogs als eine logische Einheit einzufügen.
Nun können wir dies 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.

-- 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();

Hinweis

In PostgreSQL-Triggern ist NEW eine spezielle Record-Variable, die die neu eingefügte oder aktualisierte Zeile in der Tabelle darstellt. Sie ermöglicht den Zugriff auf die Werte der Spalten der neuen Zeile innerhalb der Triggerfunktion.
Wenn wir mit gelöschten Zeilen arbeiten, muss stattdessen die Record-Variable OLD anstelle von NEW verwendet werden.

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 verhindert die Ausführung, wenn der Wert negativ ist.

-- 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 Erstellung von Triggern

Das typische Muster zur Erstellung von Triggern lässt sich wie folgt beobachten: Zunächst wird eine Funktion definiert, die spezifische Logik vor oder nach einer Operation ausführt. Anschließend wird diese Funktion als Trigger einer bestimmten Tabelle und Aktion zugeordnet.

Beachten Sie bitte die folgende Anweisung:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

Hier besteht die Flexibilität, anstelle der UPDATE-Operation auch DELETE oder INSERT zu verwenden.
Beachten Sie jedoch, dass keine SELECT-Trigger erstellt werden können, da die SELECT-Anweisung keine Zeilen in der Tabelle verändert!

question mark

Was ist der Hauptzweck der Verwendung von Triggern in einer Datenbank?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1
some-alt