MySql Error: Can ' T update Tabelle in der stored function/trigger
Ich bin mit MySQL und der Engine InnoDB. Ich habe eine SQL-Tabelle (vereinfacht) mit 4 Spalten, wie Sie in diesem Bild sehen kann :
Wenn der Staat von einer Nachfrage werden "Getan" ich möchte, dass seine Priorität auf null und alle Anforderungen mit den oben genannten Prioritäten erniedrigt.
Zum Beispiel, wenn die zweite Forderung : "Brot" ist "Fertig", seine Priorität auf null gesetzt werden und ich möchte, dass "Butter" haben eine Priorität von 2, und "Stau" eine Priorität von 3.
Habe ich diesen trigger :
DELIMITER |
CREATE TRIGGER modify_priority_trigger BEFORE UPDATE ON your_table
FOR EACH ROW
begin
if NEW.State= 'Done'
then
update your_table
set priority = priority - 1
where priority is not null
and priority > NEW.priority;
set NEW.priority = NULL;
end if;
end
|
delimiter ;
Aber ich habe eine Fehlermeldung, wenn ich das Bearbeiten einer Zeile aus einem Status von "In Bearbeitung" in "Fertig".
#1442
- Kann nicht aktualisiert Tabelle "Nachfrage" in stored function/trigger, da es bereits verwendet von Anweisung, die aufgerufen wird diese gespeichert
Funktion/trigger.
Habe ich mich für diesen Fehler im Internet, aber es ist das erste mal, dass ich SQL-trigger, so dass ich noch nicht gelingt, mein problem beheben.
Vielen Dank für deine Hilfe.
Eine Art Endlosschleife ? Wie konnte ich machen was ich will damit ?
Sie könnte verwenden Sie eine gespeicherte Prozedur zum aktualisieren des Status und kümmern sich um die sonstigen Auswirkungen dieser änderung. Bitte beachten Sie, dass Sie nicht verwenden können, ein solches Verfahren in einem update-trigger zu.
InformationsquelleAutor JeanBlaguin | 2014-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
In dem moment, wenn Sie werden versuchen, zu aktualisieren Sie Ihre Tabelle Sie beginnen eine endlos-Schleife mit trigger werden die Trigger sind nicht für die Aktualisierung Ihrer eigenen Tabellen, können Sie eine neue Tabelle erstellen, wo Sie halten den Wert der Primärschlüssel der Tabelle und der Wert für die Priorität, so dass Sie aktualisieren die Priorität, die an dem Tisch. Und in Ihrer Anwendung oder wo auch immer Sie verwenden, Sie können join dieser beiden Tabellen. Auch können Sie prüfen, aktualisieren Sie Ihre Tabelle mit der folgenden sql in der Anwendung Seite:
Auch eine neue gespeicherte Prozedur geschrieben werden können, fixieren Sie Ihre Daten selbststartenden alle 5/10 min (was auch immer gewünscht).
Es wird nicht funktionieren mit Ihrem trigger-code, den Sie schreiben sollte einen neuen code, der wird erkennen, neu aktualisierten Spalten zum Beispiel, wenn Sie halten Sie Ihre update-Datum oder so etwas, dann muss es nur aktualisieren, Status = 'Fertig' einmal. Wenn nicht, wird ein update immer Priorität, um eine weniger-Wert für alle Status = 'Fertig' .
Okay danke ! Ich habe mal im Internet schauen, wie man gespeicherte Prozedur, es ist nicht so einfach, wenn Sie wissen nichts über es. Ich werde einen anderen Weg finden, den Prozess von meinem Programm und warten Sie für das nächste Jahr, Lektionen zu erstellen, Verfahren.
InformationsquelleAutor Damla Kutluoğlu