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ä.
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;
NEWjaOLDovat 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?
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
- Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW
- PL/pgSQL-funktioiden perusteet
- DO-lohkot ja anonyymi koodi
- Taulujen auditointi triggereillä