0Pricing
SQL Academy · Lektion

Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW

Verstehen Sie den Zeitpunkt und die Granularität von Triggern (Zeile vs. Anweisung) sowie die Bedeutung von NEW und OLD innerhalb einer Triggerfunktion.

Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ein Trigger ist

Ein Trigger ist eine Funktion, die die Datenbank automatisch vor oder nach einem INSERT, UPDATE, DELETE oder TRUNCATE auf einer Tabelle aufruft.

Zwei Bestandteile: Funktion + Trigger

Sie schreiben eine Funktion, die trigger zurückgibt, und verknüpfen sie anschließend mit einer Tabelle:

CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at := NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();

BEFORE im Vergleich zu AFTER

  • BEFORE — wird ausgelöst, bevor die Zeile geschrieben wird; kann NEW ändern
  • AFTER — wird nach dem Schreibvorgang ausgelöst; für Seiteneffekte (Audit, Benachrichtigungen)

FOR EACH ROW im Vergleich zu FOR EACH STATEMENT

  • FOR EACH ROW — wird einmal pro betroffener Zeile ausgeführt; NEW und OLD sind verfügbar
  • FOR EACH STATEMENT — wird einmal pro Anweisung ausgeführt, ohne Zugriff auf einzelne Zeilen

NEW und OLD

Innerhalb eines Zeilentriggers:

  • NEW — die neue Zeile (INSERT, UPDATE)
  • OLD — die vorherige Zeile (UPDATE, DELETE)

Der Rückgabewert ist wichtig

Bei BEFORE-Zeilentriggern:

  • Geben Sie NEW zurück, um mit dieser Zeile fortzufahren
  • Geben Sie NEW in geänderter Form zurück, um den gespeicherten Wert zu ändern
  • Geben Sie NULL zurück, um die Operation für diese Zeile zu abbrechen

WHEN-Filter

Bedingtes Auslösen:

CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();

OF column

BEFORE/AFTER UPDATE kann nur ausgelöst werden, wenn sich bestimmte Spalten ändern:

CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...

Mehrere Trigger

Trigger werden alphabetisch nach ihrem Namen ausgelöst. Verwenden Sie Präfixe (00_, 10_, ...), um die Reihenfolge zu steuern.

Trigger-Leistung

Zeilentrigger werden pro Zeile ausgelöst — aufwendige Logik in einem Zeilentrigger × umfangreiches DML = langsam. Bevorzugen Sie für umfangreiche Seiteneffekte Statement-Trigger.

Trigger deaktivieren

Vorübergehend überspringen:

ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;

-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;

Trigger-Rekursion

Ein Trigger-UPDATE auf derselben Tabelle löst den Trigger erneut aus. Verwenden Sie Schutzprüfungen (pg_trigger_depth()) oder entwerfen Sie die Logik sorgfältig.

Zusammenfassung

Trigger automatisieren Reaktionen pro Zeile.

  • Funktion mit Rückgabewert TRIGGER + CREATE TRIGGER
  • BEFORE zum Ändern, AFTER für Seiteneffekte
  • NEW/OLD für den Zugriff auf Zeilen
  • WHEN und OF column für gezielte Auslösung

Kurzer Check

Sie möchten die Spalte updated_at bei jeder Änderung einer Zeile automatisch aktualisieren. Welche Trigger-Konfiguration benötigen Sie?

Häufig gestellte Fragen

Ist die Lektion „Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW“ kostenlos?

Ja — der vollständige Text von „Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW“?

Verstehen Sie den Zeitpunkt und die Granularität von Triggern (Zeile vs. Anweisung) sowie die Bedeutung von NEW und OLD innerhalb einer Triggerfunktion. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW
  2. Grundlagen von PL/pgSQL-Funktionen
  3. DO-Blöcke und anonymer Code
  4. Tabellen mit Triggern auditieren
← Zurück zu SQL Academy