Gå til innhold

Bruke triggere til å stoppe en insert (MySQL)


Anbefalte innlegg

Skrevet

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.

Videoannonse
Annonse
Skrevet

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.

 

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

Skrevet
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.

Skrevet
Personlig synes jeg det hadde vært rimelig skittent hvis jeg gjorde en INSERT og den ikke kom i databasen uten noen feilmelding.

 

Du har sannsynligvis rett i det. Regner med at det ikke er mulig for at de vanlige operasjonene skal oppføre seg forutsigbart.

Skrevet

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.

Skrevet
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 :)

  • 2 uker senere...
Skrevet

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.

Skrevet

Hvorfor bruke triggers for å sperre for ulovlige kombinasjoner? Kan du ikke bruke en check constraint?

 

Liker å bruke triggers for å oppdatere aggregate tabeller (som f.eks lagerantall)

Skrevet
Hvorfor bruke triggers for å sperre for ulovlige kombinasjoner? Kan du ikke bruke en check constraint?

 

Det kan jo være at input skal sjekkes mot verdier i andre tabeller. Tenker da ikke på foreign keys, men f.eks. status, quotas etc.

  • 2 uker senere...
Skrevet

Hva med en stored procedure da, forresten? Det er jo litt "finere" å bruke, da du også kan gjøre endringer på noen felter og slikt uten å måtte gjøre om på annet enn SP-ene dine...

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