Gå til innhold

Bruke triggere til å stoppe en insert (MySQL)


Anbefalte innlegg

Jeg har en del enheter som rapporterer inn status til et system. I databasen har jeg følgelig en statustabell. Av praktiske årsaker vil jeg ikke lagre statusoppdateringer fra en enhet oftere enn f.eks. hver halvtime.

 

Nå har jeg aldri brukt triggere før, men tenkte at det måtte være egnet her. Planen er å ha en trigger som kjøres før en insert og sjekker hvor mange minutter det er siden sist oppdatering. Dersom det viser seg at det er mindre enn 30 minutter siden sist oppdatering vil jeg avbryte INSERT spørringen.

 

Jeg har søkt meg grønn på Google uten å finne ut om det er mulig. Noen som har noen tips? For meg er det en ganske åpenbar ting å bruke triggere til så jeg har vanskelig for å tro at det er umulig.

Lenke til kommentar
Videoannonse
Annonse
En måte hadde jo vært å lage en funksjon som lagde en INSERT statement HVIS det var mer enn 30 minutter siden sist oppdatering.

 

Endte opp med å gjøre nettopp det. Irriterer meg litt for det hadde vært en utrolig mye mer gjennomsiktig løsning dersom triggere hadde fungert slik jeg vil :) Da hadde ikke folk som skulle programmere mot databasen visst om funksjonene i det hele tatt, bare brukt insert på vanlig måte. En annen ulempe er at hvis det blir nødvendig å logge flere parametere så må både tabellen og funksjonen oppdateres.

 

Et annet alternativ er å gi en throwe en Exception, men da vil hele transaksjonen mest sannsynlig bli rollbacket?

 

Ser at det blir anbefalt flere steder, men det må jo være tidens mest skitne løsning.

Lenke til kommentar
Kan ikke se hvorfor en Exception skal være skittent i denne sammenhengen. Da får applikasjonen som prøver å kjøre den beskjed om at det er noe galt og hva det er.

 

Det vil vel bli et problem dersom den opersjonen inngår i en transaksjon. Det vil være dumt å få rullet tilbake andre operasjoner pga. noe som egentlig ikke er en feil.

 

Uansett, løste saken med en lagret prosedyre og er ganske fornøyd med løsningen :)

Lenke til kommentar
  • 2 uker senere...

Trigger kan også fint returnere verdier så du kan fint få tilbakemelding dersom den oppdager at update er mindre enn 30 min siden.

 

Men om jeg ville brukt en trigger til dette vet jeg ikke.

 

Liker å bruke Triggere til:

- Oppdatere history tabeller

- lage actions dersom noe kommer i spesielle statuser

- Legge evt sperrer for ulovlige kombinasjoner (f.eks dersom det kunne vært fare for overlappinger).

 

Men alt er opp mot hvordan du vil styre reglene.

Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...