Triggerit
Sääntöjä, jotka ajetaan tietokannan sisällä jokaisen lisäyksen, muutoksen tai poiston yhteydessä — suunniteltuna visuaalisena kulkuna ja vietynä moottoriin.
Triggeri on sääntö, joka elää tietokannan sisällä ja laukeaa itsestään aina kun taulun riviä lisätään, muutetaan tai poistetaan. Se ei riipu siitä, kuka kirjoitti: tuli kirjoitus näytöltä, API:sta, skriptistä tai toisesta samaan tietokantaan kytketystä sovelluksesta, triggeri ajetaan.
Juuri se on triggerien puolesta puhuva argumentti — ja samalla se varovaisuus, jota ne vaativat: logiikka joka ajetaan ilman että kukaan kutsuu sitä, on logiikkaa jonka tapahtumista kukaan ei näe.
Missä triggerit elävät
Tietolähteen puussa, ryhmässä Ohjelmointi, kohteen Funktiot / proseduurit vieressä:

Triggerin napsauttaminen avaa sen työtilan välilehteen, kulku valmiiksi piirrettynä.
Nota
Kaikki tietokantamoottorit eivät tue näin suunniteltuja triggereitä. Alusta tarjoaa vain sen, minkä kytketty moottori osaa: jos Uusi triggeri ei näy tietolähteen valikossa, kyseinen moottori ei tue sitä. Alustan ulkopuolella luodut triggerit näkyvät listalla edelleen, merkittyinä tekstillä Ulkoinen triggeri — ei tue canvasia (vain SQL-muokkaus).

Triggerin luominen
- Vie hiiri tietolähteen päälle ja avaa valikko ⋯.
- Valitse Uusi triggeri. Avautuu valintaikkuna, jossa ovat triggerin perustiedot — kulku rakennetaan seuraavaksi canvasilla.
- Täytä:
| Kenttä | Mikä se on |
|---|---|
| Nimi | Triggerin nimi tietokannassa. Ehdotettu käytäntö on trg_oma_taulu. |
| Taulu | Vahdittava taulu. |
| Ajankohta | BEFORE (ennen kuin rivi kirjoitetaan) tai AFTER (sen jälkeen). |
| Tapahtumat | INSERT, UPDATE, DELETE — vähintään yksi. Jotkin moottorit hyväksyvät useita samassa triggerissä, toiset vain yhden. |
- Vahvista painikkeella Luo ja avaa canvas.
Triggeri syntyy luonnoksena: se on jo olemassa alustalla, mutta sitä ei ole vielä viety tietokantaan. Niin kauan kuin se on luonnos, puu näyttää sen sellaisena.
Ajankohta ja tapahtumat käytännössä
| Valinta | Mihin |
|---|---|
| BEFORE INSERT/UPDATE | Arvojen normalisointiin tai täydentämiseen ennen tallennusta — koodin muuttaminen isoiksi kirjaimiksi, johdetun kentän täyttäminen. |
| AFTER INSERT/UPDATE/DELETE | Reagointiin jo tapahtuneeseen — historiarivin kirjoittaminen, summan päivittäminen toiseen tauluun. |
Rivin arvot ovat käytettävissä tapahtuman mukaan: Uudet arvot (NEW) ovat
olemassa INSERT- ja UPDATE-tapahtumissa; Vanhat arvot (OLD) näkyvät vain
kun triggeri kuuntelee tapahtumia UPDATE tai DELETE — INSERT-tapahtumassa
ei ole vanhaa riviä näytettäväksi.
Triggerin canvas
Kulku piirretään canvasille, ja yläreunan vihje tiivistää eleen: vedä funktioita tai proseduureja puusta canvasille; kaksoisnapsauta laatikkoa määrittääksesi sen inputit ja outputit.
Canvasin yläpuolella olevassa palkissa on vasemmalta oikealle:
| Painike | Mitä se tekee |
|---|---|
| Asetukset | Avaa uudelleen triggerin nimen, taulun sekä kohdat Ajankohta ja Tapahtumat. |
| (yhteenveto) | Nimi, taulu, ajankohta ja tapahtumat, aina näkyvissä. |
| Lauseke | Lisää kulkuun lausekesolmun. |
| Näytä SQL | Näyttää käännetyn triggerin suorittamatta mitään. |
| Tallenna ja vie tietokantaan | Tallentaa triggerin ja vie sen moottoriin. |
Taulun laatikko — mikä tulee kulkuun
Canvasin ensimmäinen laatikko on taulu: siitä tulevat ulos sen rivin arvot, joka laukaisi triggerin. Kaksoisnapsauta sitä avataksesi kohdan Triggerin outputit ja valitaksesi, mitä tämä triggeri tarjoaa kululle: yksittäisiä sarakkeita, koko rivin (JSON) tai molemmat.
- Uudet arvot (NEW) — rivi sellaisena kuin se jää.
- Vanhat arvot (OLD) — rivi sellaisena kuin se oli.
- Kummassakin tapauksessa voit yksittäisten sarakkeiden lisäksi tarjota koko rivin (JSON) — kätevää, kun halutaan antaa kaikki kerralla historiafunktiolle.
Jokaisesta valitusta ulostulosta tulee laatikkoon portti, joka on valmis yhdistettäväksi.
Funktiot ja proseduurit
Triggerin varsinaisen työn tekevät funktiot ja proseduurit, jotka ovat jo tietokannassa. Vedä ne puusta (Ohjelmointi ▸ Funktiot / proseduurit) canvasille: kustakin tulee laatikko, jossa on yksi parametri sisääntuloa kohti.
- Yhdistä taulun portti siihen parametriin, jota se syöttää — parametri alkaa näyttää tilaa yhdistetty.
- Yhdistämätön parametri jää oletusarvoonsa.
- Funktiot myös palauttavat arvon: paluuportti voi syöttää toista laatikkoa ja ketjuttaa vaiheita.
- Laatikon omassa valikossa on Poista kulusta.
Yhteyden purkamiseksi napsauta viivaa: Poistetaanko tämä yhteys? Parametri lakkaa saamasta tätä arvoa.
Lausekesolmut
Portin ja parametrin välillä arvo ei aina kelpaa sellaisenaan. Painike
Lauseke lisää solmun, joka hioo tai muuntaa arvoja: määrittelet
Inputit (painikkeella + input), yhdistät niihin portteja ja kirjoitat
SQL-lausekkeen käyttäen merkintöjä {a}, {b}… yhdistetyille inputeille —
esimerkiksi upper({a}) || '-' || {b}. Tulos tulee ulos solmun portista ja
jatkaa minne haluat.
Kaksoisnapsauta solmua määrittääksesi sen (laatikko itse sanoo kaksoisnapsauta muokataksesi…, kun se on tyhjä).
SQL:n katselu ennen käyttöönottoa
Näytä SQL avaa esikatselun — Triggerin SQL (esikatselu) — ja siinä on olennainen huomautus: Käännetty nykyisillä muutoksillasi — mitään ei ole suoritettu. Tarkista ja ota käyttöön milloin haluat.
Se on turvallisuusaskel: näet täsmälleen, mitä tietokantaan ollaan luomassa, voit kopioida sen, näyttää sen moottorin ylläpitäjälle ja vasta sitten ottaa käyttöön. Samassa valintaikkunassa on painike Tallenna ja vie tietokantaan käden ulottuvilla.
Triggerin vieminen tietokantaan
Tallenna ja vie tietokantaan tekee molemmat asiat: tallentaa piirroksen ja luo triggerin moottoriin. Kun se onnistuu, alusta vahvistaa: Triggeri viety tietokantaan.
Ennen käyttöönottoa piirros tarkistetaan. Kieltäytymiset ovat suoria:
| Viesti | Mitä puuttuu |
|---|---|
| Anna triggerille nimi (Asetukset). | Nimi. |
| Valitse taulu (Asetukset). | Vahdittava taulu. |
| Valitse vähintään yksi tapahtuma (Asetukset). | Vähintään yksi tapahtumista INSERT/UPDATE/DELETE. |
| Canvasilla ei ole yhtään funktiota tai proseduuria. | Tyhjä kulku ei tee mitään — vedä canvasille vähintään yksi funktio. |
| Kulussa on lausekesolmu, jolle ei ole määritelty lauseketta. | Tyhjä lausekesolmu. |
Atenção
Triggerin käyttöönotto on kirjoitus kytkettyyn tietokantaan, ja se vaikuttaa välittömästi kaikkiin kyseisen taulun kirjoituksiin — myös niihin, jotka olivat jo käynnissä. Tuotantojärjestelmässä katso SQL ensin ja ota käyttöön sovittuna ajankohtana.
Triggerin poistaminen
Puussa triggerin valikossa ⋯ on Poista, ja se vahvistetaan — Poistetaanko triggeri ”…”? — ja se on lopullista: triggeri poistuu tietokannasta.
Sen katsominen, mitä tietokannassa on
SQL-konsoli mallikaavion alapuolella on paikka, jossa triggerin vaikutus varmistetaan: kirjoita kysely, Suorita, ja katso oikeat rivit. Sitä kautta myös tutkitaan sitä, mitä siellä oli jo ennen sinun tuloasi.

Triggeri, skripti vai työnkulku?
Kaikki kolme automatisoivat, ja oikea valinta säästää kuukausien sekaannuksen:
| Työkalu | Ajetaan… | Hyvä tähän |
|---|---|---|
| Triggeri | Tietokannan sisällä, jokaisella taulun kirjoituksella. | Säännöt, joiden on pädettävä kaikkiin kirjoituksiin: historia, johdetut kentät, summat. |
| Skripti | Tietokannan ulkopuolella: käsin, ajastettuna tai API:n vaiheena. | Raskas työ, integraatiot, tiedostot, lähetykset — kaikki mikä kestää tai puhuu ulkomaailman kanssa. |
| Työnkulku | Prosessina, jossa on vaiheita, päätöksiä ja ihmisen tehtäviä. | Hyväksynnät, kierrokset joissa on ihmisiä välissä, odotukset. |
Dica
Jos logiikka koskee dataa eikä se saa pettää, se on triggeri. Jos logiikka koskee liiketoimintaa ja jonkun on nähtävä sen tapahtuvan, se ei ole: skripti tai työnkulku jättävät merkinnän, ajetaan historian kanssa ja selittävät itsensä Radarissa.
Miksi ei…?
- Miksi Uusi triggeri ei näy tietolähteen valikossa? Kytketty moottori ei tue canvasilla suunniteltuja triggereitä. Voit yhä luoda niitä SQL:llä, ja ne näkyvät puussa ulkoisina triggereinä.
- Miksi triggeri sanoo edelleen olevansa luonnos? Se luotiin, mutta sitä ei ole vielä viety tietokantaan. Avaa se ja käytä painiketta Tallenna ja vie tietokantaan.
- Miksi en näe kohtaa Vanhat arvot (OLD)? Triggeri ei kuuntele tapahtumia
UPDATEeikäDELETE.INSERT-tapahtumassa ei ole vanhaa riviä. - Miksi en pysty yhdistämään porttia parametriin? Kaikissa yhteyksissä ei ole järkeä — varmista, että yhdistät ulostuloa (laatikon oikealla puolella) sisääntuloon (toisen laatikon vasemmalla puolella).
- Miksi triggeri ei tee mitään? Kulku ilman funktioita ei tuota mitään
työtä: kääntäjä hylkää sen. Tarkista myös Ajankohta —
BEFOREjaAFTEReivät näe samaa asiaa. - Miksi kirjoitukset hidastuivat triggerin luomisen jälkeen? Triggeri ajetaan jokaisella kirjoitetulla rivillä. Jos se kutsuu raskasta työtä, se työ tapahtuu nyt jokaisella lisäyksellä — silloin oikea paikka on ajastettu skripti.