Trigger-Falle: Aktualisieren einer vom Trigger referenzierten Tabelle
Das Aktualisieren derselben Tabelle innerhalb eines Triggers kann zu Problemen führen. Ein solcher Fall wird dargestellt, bei dem versucht wird, die Tabelle „products_score“ mithilfe eines Triggers zu aktualisieren, der nach einer Aktualisierung ausgeführt wird.
Der Trigger versucht, wie im bereitgestellten Code gezeigt, die Spalte „votes_total“ basierend auf zu berechnen und zu aktualisieren die Werte anderer Spalten (votes_1, votes_2, ..., votes_5) in derselben products_score-Tabelle. Wenn dieses Update jedoch ausgelöst wird, tritt ein Fehler auf:
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Lösung: Verwendung eines BEFORE-Triggers
Um dieses Problem zu beheben, muss der Trigger geändert werden vor der Zeilenaktualisierung ausführen, nicht danach. Durch die Ausführung vor der Aktualisierung kann der Trigger auf die neuen Werte zugreifen und diese ändern, die der Spalte votes_total zugewiesen werden.
Der überarbeitete Trigger, der eine BEFORE-Update-Klausel verwendet, lautet wie folgt:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5; END;
Mit Durch diese Änderung berechnet und aktualisiert der Trigger erfolgreich die Spalte votes_total, bevor die eigentliche Zeilenaktualisierung erfolgt, wodurch der Fehler behoben und die gewünschte Funktionalität ermöglicht wird.
Das obige ist der detaillierte Inhalt vonWarum verursacht das Aktualisieren einer Tabelle innerhalb eines Triggers den Fehler Nr. 1442, und wie kann dieser behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!