Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW
Begrijp de timing en granulariteit van triggers (rij versus instructie) en wat NEW en OLD betekenen in een triggerfunctie.
Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW is een gratis SQL Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
Wat is een trigger?
Een trigger is een functie die de database automatisch aanroept vóór of na een INSERT, UPDATE, DELETE of TRUNCATE op een tabel.
Twee onderdelen: functie + trigger
Je schrijft een functie die trigger retourneert en koppelt deze vervolgens aan een tabel:
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 versus AFTER
- BEFORE — wordt uitgevoerd voordat de rij wordt geschreven; kan NEW wijzigen
- AFTER — wordt uitgevoerd nadat de rij is geschreven; voor neveneffecten (controle, meldingen)
FOR EACH ROW versus FOR EACH STATEMENT
- FOR EACH ROW — wordt één keer per beïnvloede rij uitgevoerd;
NEWenOLDzijn beschikbaar - FOR EACH STATEMENT — wordt één keer per instructie uitgevoerd, zonder toegang tot afzonderlijke rijen
NEW en OLD
Binnen een trigger op rijniveau:
NEW— de nieuwe rij (INSERT, UPDATE)OLD— de vorige rij (UPDATE, DELETE)
De retourwaarde is belangrijk
Voor triggers op rijniveau met BEFORE:
- Retourneer
NEWom door te gaan met die rij - Retourneer een gewijzigde
NEWom op te slaan wat wordt opgeslagen - Retourneer
NULLom de bewerking voor die rij te annuleren
WHEN-filter
Voorwaardelijke uitvoering:
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-kolom
BEFORE/AFTER UPDATE kan alleen worden uitgevoerd wanneer specifieke kolommen wijzigen:
CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...Meerdere triggers
Triggers worden uitgevoerd in alfabetische volgorde op basis van hun naam. Gebruik voorvoegsels (00_, 10_, ...) om de volgorde te bepalen.
Triggerprestaties
Triggers op rijniveau worden per rij uitgevoerd — zware logica in een trigger op rijniveau × grote DML-bewerking = traag. Geef voor bulkneveneffecten de voorkeur aan triggers op instructieniveau.
Triggers uitschakelen
Tijdelijk overslaan:
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;Triggerrecursie
Een UPDATE-trigger op dezelfde tabel activeert de trigger opnieuw. Gebruik beveiligingen (pg_trigger_depth()) of ontwerp dit zorgvuldig.
Samenvatting
Triggers automatiseren reacties per rij.
- Functie die TRIGGER retourneert + CREATE TRIGGER
- BEFORE voor wijzigingen, AFTER voor neveneffecten
- NEW/OLD voor toegang tot rijen
- WHEN en OF column voor selectiviteit
Snelle controle
Je wilt bij elke wijziging van een rij automatisch een kolom updated_at bijwerken. Welke triggerconfiguratie gebruik je?
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW” gratis?
Ja — de volledige tekst van “Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW”?
Begrijp de timing en granulariteit van triggers (rij versus instructie) en wat NEW en OLD betekenen in een triggerfunctie. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Anatomie van triggers: BEFORE/AFTER, FOR EACH ROW
- Basis van PL/pgSQL-functies
- DO-blokken en anonieme code
- Tabellen auditen met triggers