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;
NEWundOLDsind 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
NEWzurück, um mit dieser Zeile fortzufahren - Geben Sie
NEWin geänderter Form zurück, um den gespeicherten Wert zu ändern - Geben Sie
NULLzurü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
- Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW
- Grundlagen von PL/pgSQL-Funktionen
- DO-Blöcke und anonymer Code
- Tabellen mit Triggern auditieren