Triggers
Regler som körs inne i databasen vid varje infogning, ändring eller borttagning — ritade i ett visuellt flöde och tillämpade på motorn.
En trigger är en regel som lever inne i databasen och utlöses av sig själv varje gång en rad i en tabell infogas, ändras eller raderas. Den bryr sig inte om vem som skrev: kommer skrivningen från en skärm, ett API, ett skript eller en annan applikation kopplad till samma databas, så körs triggern.
Det är argumentet för triggers, och också den försiktighet de kräver — logik som körs utan att någon anropar den är logik som ingen ser hända.
Var triggers lever
I datakällans träd, inuti gruppen Programmering, bredvid Funktioner/procedurer:

Att klicka på en trigger öppnar den i en flik i arbetsytan, med sitt flöde uppritat.
Nota
Alla databasmotorer stöder inte triggers som ritas så här. Plattformen erbjuder bara det som den anslutna motorn kan göra: om Ny trigger inte dyker upp i datakällans meny är det för att den motorn inte stöder det. Triggers som skapats utanför plattformen listas fortfarande, märkta som Extern trigger — stöder inte canvas (endast SQL-redigering).

Skapa en trigger
- Hovra över datakällan och öppna menyn ⋯.
- Välj Ny trigger. Dialogen öppnas med triggerns grunduppgifter — flödet byggs sedan i canvasen.
- Fyll i:
| Fält | Vad det är |
|---|---|
| Namn | Triggerns namn i databasen. Konventionen som föreslås är trg_min_tabell. |
| Tabell | Tabellen som bevakas. |
| Tidpunkt | BEFORE (innan raden skrivs) eller AFTER (efteråt). |
| Händelser | INSERT, UPDATE, DELETE — minst en. Vissa motorer tar emot flera i samma trigger, andra bara en. |
- Bekräfta med Skapa och öppna canvas.
Triggern föds som utkast: den finns redan i plattformen, men har ännu inte tillämpats på databasen. Så länge den är utkast markerar trädet den som sådan.
Tidpunkt och händelser, i praktiken
| Val | Till vad |
|---|---|
| BEFORE INSERT/UPDATE | Normalisera eller komplettera värden innan de sparas — sätta en kod i versaler, fylla i ett härlett fält. |
| AFTER INSERT/UPDATE/DELETE | Reagera på det som redan hänt — skriva en historik, uppdatera en summa i en annan tabell. |
Radens värden är tillgängliga beroende på händelsen: Nya värden (NEW) finns i
INSERT och UPDATE; Gamla värden (OLD) dyker bara upp när triggern lyssnar
på UPDATE eller DELETE — i ett INSERT finns ingen gammal rad att visa.
Triggerns canvas
Flödet ritas på en canvas, och tipset längst upp sammanfattar rörelsen: dra funktioner och procedurer från trädet till canvasen; dubbelklicka på en ruta för att konfigurera dess in- och utdata.
I listen ovanför canvasen finns, från vänster till höger:
| Knapp | Vad den gör |
|---|---|
| Inställningar | Öppnar triggerns namn, tabell, Tidpunkt och Händelser igen. |
| (sammanfattningen) | Namnet, tabellen, tidpunkten och händelserna, alltid synliga. |
| Uttryck | Lägger till en uttrycksnod i flödet. |
| Visa SQL | Visar den kompilerade triggern, utan att köra något. |
| Spara och tillämpa i databasen | Sparar och tillämpar triggern på motorn. |
Tabellrutan — det som kommer in i flödet
Canvasens första ruta är tabellen: det är därifrån värdena kommer från raden som utlöste triggern. Dubbelklicka på den för att öppna Triggerns outputs och välja vad den här triggern exponerar för flödet: enskilda kolumner, hela raden (JSON) eller båda.
- Nya värden (NEW) — raden som den blir.
- Gamla värden (OLD) — raden som den var.
- I båda fallen kan du, utöver de enskilda kolumnerna, exponera hela raden (JSON) — praktiskt för att lämna över allt på en gång till en historikfunktion.
Varje vald utdata blir en port på rutan, redo att kopplas.
Funktionerna och procedurerna
Arbetet i en trigger görs av funktioner och procedurer som redan finns i databasen. Dra dem från trädet (Programmering ▸ Funktioner/procedurer) till canvasen: var och en blir en ruta med en parameter per ingång.
- Koppla en port på tabellen till parametern den matar — parametern visar sig sedan som kopplad.
- En parameter utan koppling behåller sitt standardvärde.
- Funktioner returnerar också värden: returporten kan mata en annan ruta, så att stegen kedjas ihop.
- Rutans egen meny har Ta bort från flödet.
För att göra en koppling ogjord klickar du på linjen: Ta bort den här kopplingen? Parametern slutar ta emot det här värdet.
Uttrycksnoderna
Mellan en port och en parameter duger värdet inte alltid som det är. Knappen
Uttryck lägger till en nod som förfinar eller omvandlar värden: du
deklarerar Inputs (med + input), kopplar portar till dem och skriver
SQL-uttrycket med {a}, {b}… för de kopplade inputen — till exempel
upper({a}) || '-' || {b}. Resultatet kommer ut i nodens port och går vidare dit
du vill.
Dubbelklicka på noden för att konfigurera den (rutan säger själv dubbelklicka för att redigera… medan den är tom).
Se SQL:en innan du tillämpar
Visa SQL öppnar förhandsvisningen — Triggerns SQL (förhandsvisning) — med den varning som betyder något: Kompilerad med dina nuvarande ändringar — ingenting har körts. Granska och tillämpa när du vill.
Det är säkerhetssteget: du ser exakt vad som kommer att skapas i databasen, du kan kopiera det, visa det för den som administrerar motorn, och först därefter tillämpa. Samma dialog har knappen Spara och tillämpa i databasen nära till hands.
Tillämpa triggern
Spara och tillämpa i databasen gör två saker: sparar ritningen och skapar triggern i motorn. När det går bra bekräftar plattformen: Triggern har tillämpats i databasen.
Innan den tillämpas kontrolleras ritningen. Nekandena är tydliga:
| Meddelande | Vad som saknas |
|---|---|
| Ge triggern ett namn (Inställningar). | Namnet. |
| Välj tabellen (Inställningar). | Tabellen som bevakas. |
| Välj minst en händelse (Inställningar). | Minst en av INSERT/UPDATE/DELETE. |
| Canvasen har ingen funktion eller procedur. | Ett tomt flöde gör ingenting — dra dit minst en funktion. |
| Det finns en uttrycksnod utan definierat uttryck. | En tom uttrycksnod. |
Atenção
Att tillämpa en trigger är en skrivning i den anslutna databasen, med omedelbar verkan på alla skrivningar i den tabellen — inklusive de som redan pågick. I ett system i produktion: titta på SQL:en först och tillämpa på överenskommen tid.
Ta bort en trigger
Menyn ⋯ på triggern i trädet har Ta bort, med bekräftelse — Ta bort triggern ”…”? — och den är slutgiltig: triggern försvinner ur databasen.
Se vad som finns i databasen
SQL-konsolen, under modelldiagrammet, är stället för att bekräfta en triggers effekt: skriv en fråga, Kör, och se de riktiga raderna. Det är också härifrån man inspekterar det som redan låg där innan du kom.

Trigger, skript eller arbetsflöde?
Alla tre automatiserar, och rätt val besparar dig månader av förvirring:
| Verktyg | Körs… | Bra för |
|---|---|---|
| Trigger | Inne i databasen, vid varje skrivning i tabellen. | Regler som måste gälla för alla skrivningar: historik, härledda fält, summor. |
| Skript | Utanför databasen, för hand, schemalagt eller som steg i ett API. | Tungt arbete, integrationer, filer, utskick — allt som tar tid eller talar med omvärlden. |
| Arbetsflöde | Som en process med steg, beslut och mänskliga uppgifter. | Godkännanden, kretslopp med människor emellan, väntan. |
Dica
Om logiken handlar om data och inte får fallera är det en trigger. Om logiken handlar om affären och någon måste se den hända är det inte det: ett skript eller ett arbetsflöde lämnar spår, körs med historik och förklarar sig själva i Radar.
Varför inte…?
- Varför dyker Ny trigger inte upp i datakällans meny? Den anslutna motorn stöder inte triggers ritade på canvasen. Du kan fortfarande skapa dem i SQL, och de dyker upp i trädet som externa triggers.
- Varför säger triggern fortfarande att den är ett utkast? Den skapades men har ännu inte tillämpats. Öppna den och använd Spara och tillämpa i databasen.
- Varför ser jag inte Gamla värden (OLD)? Triggern lyssnar varken på
UPDATEellerDELETE. I ettINSERTfinns ingen gammal rad. - Varför går det inte att koppla en port till en parameter? Alla kopplingar är inte meningsfulla — kontrollera att du kopplar en utgång (till höger på rutan) till en ingång (till vänster på den andra).
- Varför gör triggern ingenting? Ett flöde utan funktioner genererar inget
arbete alls: kompileringen vägrar det. Och kontrollera Tidpunkt — ett
BEFOREoch ettAFTERser inte samma sak. - Varför blev skrivningarna långsamma efter att jag skapat triggern? Triggern körs på varje skriven rad. Om den anropar tungt arbete har det arbetet börjat hända vid varje infogning — i de fallen hör det hemma i ett schemalagt skript.