SQL Academy · leksjon

Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW

Forstå når triggere utløses, granulariteten deres (rad kontra setning), og hva NEW og OLD betyr i en triggerfunksjon.

Leksjon 1 av 414 trinn

Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva er en trigger?

En trigger er en funksjon som databasen automatisk kaller før eller etter en INSERT, UPDATE, DELETE eller TRUNCATE på en tabell.

To deler: funksjon + trigger

Du skriver en funksjon som returnerer trigger, og knytter den deretter til en tabell:

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 kontra AFTER

  • BEFORE — utløses før raden skrives; kan endre NEW
  • AFTER — utløses etter skrivingen; brukes til bieffekter (revisjon, varslinger)

FOR EACH ROW kontra FOR EACH STATEMENT

  • FOR EACH ROW — kjøres én gang per berørte rad; NEW og OLD er tilgjengelige
  • FOR EACH STATEMENT — kjøres én gang per setning, uten tilgang til enkeltstående rader

NEW og OLD

Inne i en radtrigger:

  • NEW — den nye raden (INSERT, UPDATE)
  • OLD — den forrige raden (UPDATE, DELETE)

Returverdien er viktig

For BEFORE-radtriggere:

  • Returner NEW for å fortsette med raden
  • Returner en endret NEW for å endre det som lagres
  • Returner NULL for å avbryte operasjonen for den raden

WHEN-filter

Betinget utløsning:

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-kolonne

BEFORE/AFTER UPDATE kan utløses bare når bestemte kolonner endres:

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

Flere triggere

Triggere utløses i alfabetisk rekkefølge etter triggernavn. Bruk prefikser (00_, 10_, ...) for å styre rekkefølgen.

Ytelse for triggere

Radtriggere utløses for hver rad — tung logikk i en radtrigger × stor DML = tregt. Foretrekk setningstriggere for bieffekter i masseoperasjoner.

Deaktivere triggere

Hopp over midlertidig:

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;

Triggerrekursjon

En UPDATE i en trigger på samme tabell utløser triggeren på nytt. Bruk vakter (pg_trigger_depth()) eller utform løsningen med omtanke.

Oppsummering

Triggere automatiserer reaksjoner per rad.

  • Funksjon som returnerer TRIGGER + CREATE TRIGGER
  • BEFORE for endringer, AFTER for bieffekter
  • NEW/OLD for tilgang til rader
  • WHEN og OF column for selektivitet

Hurtigsjekk

Du vil automatisk oppdatere en updated_at-kolonne hver gang en rad endres. Hvilket triggeroppsett bør du bruke?

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW» gratis?

Ja – hele teksten i «Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW»?

Forstå når triggere utløses, granulariteten deres (rad kontra setning), og hva NEW og OLD betyr i en triggerfunksjon. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?

Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW
  2. Grunnleggende om PL/pgSQL-funksjoner
  3. DO-blokker og anonym kode
  4. Revisjon av tabeller med triggere
← Tilbake til SQL Academy