Heim > Datenbank > MySQL-Tutorial > Warum verursacht das Aktualisieren einer Tabelle innerhalb eines Triggers den Fehler Nr. 1442, und wie kann dieser behoben werden?

Warum verursacht das Aktualisieren einer Tabelle innerhalb eines Triggers den Fehler Nr. 1442, und wie kann dieser behoben werden?

Mary-Kate Olsen
Freigeben: 2024-12-23 03:03:33
Original
215 Leute haben es durchsucht

Why Does Updating a Table Inside a Trigger Cause Error #1442, and How Can This Be Solved?

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.
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage