SQL Academy · Oppitunti

Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW

Ymmärrä triggerin ajoitus ja laajuus (rivi tai lauseke) sekä se, mitä NEW ja OLD tarkoittavat trigger-funktion sisällä.

Oppitunti 1/414 vaihetta

Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mikä triggeri on

Triggeri on funktio, jonka tietokanta kutsuu automaattisesti ennen taulun INSERT-, UPDATE-, DELETE- tai TRUNCATE-operaatiota tai sen jälkeen.

Kaksi osaa: funktio + triggeri

Kirjoitatte funktion, joka palauttaa arvon trigger, ja liitätte sen sitten tauluun:

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

  • BEFORE — suoritetaan ennen rivin kirjoittamista; NEW-arvoa voi muuttaa
  • AFTER — suoritetaan kirjoittamisen jälkeen; sivuvaikutuksia varten (auditointi, ilmoitukset)

FOR EACH ROW vai FOR EACH STATEMENT

  • FOR EACH ROW — suoritetaan kerran jokaista käsiteltyä riviä kohden; NEW ja OLD ovat käytettävissä
  • FOR EACH STATEMENT — suoritetaan kerran lausetta kohden, eikä yksittäisiin riveihin pääse käsiksi

NEW ja OLD

Rivitriggerin sisällä:

  • NEW — uusi rivi (INSERT, UPDATE)
  • OLD — aiempi rivi (UPDATE, DELETE)

Palautusarvolla on merkitystä

BEFORE-rivitriggereissä:

  • Palauttakaa NEW, jotta rivin käsittely jatkuu
  • Palauttakaa muokattu NEW, jos haluatte muuttaa tallennettavaa arvoa
  • Palauttakaa NULL, jos haluatte perua kyseisen rivin käsittelyn

WHEN-suodatin

Ehdollinen suoritus:

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

BEFORE/AFTER UPDATE voidaan suorittaa vain, kun tietyt sarakkeet muuttuvat:

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

Useita triggereitä

Triggerit suoritetaan triggerin nimen mukaisessa aakkosjärjestyksessä. Käyttäkää etuliitteitä (00_, 10_, ...), jos haluatte hallita järjestystä.

Triggerien suorituskyky

Rivitriggerit suoritetaan jokaiselle riville — raskas logiikka rivitriggerissä × suuri DML-operaatio = hitaus. Suosikaa lausetriggereitä joukkomuotoisten sivuvaikutusten käsittelyyn.

Triggerien poistaminen käytöstä

Ohittakaa väliaikaisesti:

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;

Triggerin rekursio

Triggerin tekemä UPDATE samaan tauluun suorittaa triggerin uudelleen. Käyttäkää suojauksia (pg_trigger_depth()) tai suunnitelkaa toiminta huolellisesti.

Kertaus

Triggerit automatisoivat rivikohtaiset reaktiot.

  • TRIGGER-arvon palauttava funktio + CREATE TRIGGER
  • BEFORE muokkaamiseen, AFTER sivuvaikutuksiin
  • NEW/OLD rivien käsittelyyn
  • WHEN ja OF column valikoivuuden lisäämiseen

Pikatarkistus

Haluatte päivittää updated_at-sarakkeen automaattisesti aina, kun rivi muuttuu. Millainen triggerimääritys tarvitaan?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW” ilmainen?

Kyllä – oppitunnin ”Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW”?

Ymmärrä triggerin ajoitus ja laajuus (rivi tai lauseke) sekä se, mitä NEW ja OLD tarkoittavat trigger-funktion sisällä. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW
  2. PL/pgSQL-funktioiden perusteet
  3. DO-lohkot ja anonyymi koodi
  4. Taulujen auditointi triggereillä
← Takaisin: SQL Academy