Fehlerbehebung bei Triggern: Inkompatibilität mit Tabellenänderungen
In MySQL sind Trigger ein leistungsstarkes Tool zur Automatisierung von Datenbankaktionen basierend auf bestimmten Ereignissen. Wenn jedoch bei der Ausführung eines Triggers Probleme auftreten, ist die Fehlerbehebung von entscheidender Bedeutung. In diesem Artikel wird ein häufiger Fehler behandelt, der auftritt, wenn ein MySQL-Trigger nicht funktioniert.
Problembeschreibung:
Ein Benutzer hat gemeldet, dass sein Trigger eine bestimmte Spalte (PTS) nicht aktualisiert ), wenn sich die entsprechende Spalte „played_games“ in der pos_table änderte. Obwohl die Abfrage manuell funktionierte, konnte der Trigger keine Aktualisierung auslösen.
Triggerstruktur:
CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table` FOR EACH ROW BEGIN IF (NEW.played_games <> OLD.played_games) THEN update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1)); END IF; END
Fehler aufgetreten:
Beim Versuch, die Spalte „played_games“ manuell zu bearbeiten, erhielt der Benutzer eine Fehlermeldung mit der Meldung: „Die Tabelle pos_table in der gespeicherten Funktion/dem gespeicherten Trigger kann nicht aktualisiert werden, da sie bereits von der Anweisung verwendet wird, die diese gespeicherte Funktion/diesen gespeicherten Trigger aufgerufen hat.“
Lösung:
Das Problem entstand aus der Tatsache, dass der Auslöser versuchte, dieselbe Tabelle (pos_table) zu ändern, auf die im auslösenden Ereignis (Aktualisierung der gespielten_Spiele) verwiesen wurde. Wie in den gespeicherten Programmbeschränkungen von MySQL dokumentiert, kann eine gespeicherte Funktion oder ein gespeicherter Trigger keine Tabelle ändern, die bereits von der aufrufenden Anweisung verwendet wird.
Alternative Lösung:
Zu vermeiden Bei diesem Problem wird empfohlen, stattdessen einen BEFORE INSERT-Trigger zu verwenden. In diesem Fall könnte der Auslöser wie folgt geändert werden:
CREATE TRIGGER `upd_PTS` BEFORE INSERT ON `pos_table` FOR EACH ROW BEGIN SET NEW.PTS = ((NEW.won_games*2)+(NEW.tie_games*1)); END
Zusätzliche Überlegungen:
Zusätzlich zum aufgetretenen Fehler hebt der Artikel auch das Problem mit hervor Speichern einer berechneten Spalte wie PTS. Da es während der Anzeige leicht aus anderen Spalten berechnet werden kann, ist es möglicherweise effizienter und weniger fehleranfällig, es nicht als separate Spalte zu speichern.
Das obige ist der detaillierte Inhalt vonWarum kann ich eine Tabelle nicht innerhalb eines Triggers aktualisieren, der dieselbe Tabelle in MySQL ändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!