Gå til innhold

Problem med Mysql og trigger med delete.


Anbefalte innlegg

Hei.

Jeg har to tabeller, temp_data og data, hvor temp_data inneholder samtlige felt i data samt et boolsk godkjent.

Tanken er at når man oppdaterer en rad i temp_data og godkjent blir satt til true, skal en trigger automatisk kopiere dataene over til tabell data, og samtidig slette den originale raden. Mens jeg arbeider med triggeren har jeg opprettet to tilsvarende tabeller, a og b, som inneholder feltene fornavn, mellom, og etter (samt grei i a).

Har følgende trigger:

mysql> CREATE TRIGGER flytt AFTER UPDATE ON a
   -> FOR EACH ROW
   -> BEGIN
   -> IF NEW.grei = true THEN
   -> INSERT INTO b(fornavn, mellom, etter) VALUES(
   -> NEW.fornavn, NEW.mellom, NEW.etter);
   -> DELETE FROM a WHERE a.fornavn = NEW.fornavn AND
   -> a.etter = NEW.etter
   -> AND a.mellom = NEW.mellom;
   -> END IF;
   -> END;
   -> //

 

Prøver jeg deretter å sette grei til true får jeg følgende feilmelding (har bare en linje i tabellen):

mysql> UPDATE a SET grei=true;

ERROR 1442 (HY000): Can't update table 'a' in stored function/trigger because it

is already used by statement which invoked this stored function/trigger.

Hvordan omgår jeg dette problemet?

Lenke til kommentar
Videoannonse
Annonse

Vet ikke om alt fungerer likt på MySQL som i andre databaser, men jeg ville lest ut innholdet til en tabellvariabel (evt en variabel for hver av feltene), kjørt en rollback transaction for å hindre oppdateringen i a, og så satt inn dataene i den andre tabellen.

 

Edit: Har MySQL tabellvariable forresten?

Endret av roac
Lenke til kommentar
Men om jeg kjører en rollback, vil ikke da dataene fortsatt ligge i a, bare uendret? Den ene tabellen skal bare fungere som et buffer hvor en gitt linje blir slettet etter den er godkjent.

7149848[/snapback]

Sorry, så ikke i farten at du brukte en after trigger. Løsningen blir i så fall å bruke en before trigger isteden, ellers se tidligere innlegg.

Lenke til kommentar

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