Fehlerbehebung bei einem nicht funktionsfähigen MySQL-Trigger zum Aktualisieren von PTS auf Spielstatistiken
Bedenken Sie dieses Problem: Obwohl die manuelle Ausführung der Abfrage erfolgreich war, Ein Auslöser, der die PTS-Spalte basierend auf geänderten Played_Games-Werten automatisch aktualisieren soll, funktioniert nicht. Die Trigger-Syntax ist unkompliziert:
<code class="sql">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</code>
Eine weitere Untersuchung zeigt jedoch einen Fehler beim Versuch, „played_games“ manuell zu ändern: „Tabelle pos_table in gespeicherter Funktion/gespeichertem Trigger kann nicht aktualisiert werden, da sie bereits von der Anweisung verwendet wird, die dies aufgerufen hat.“ gespeicherte Funktion/Trigger. Es ist ihnen untersagt, Tabellen zu ändern, aus denen die aufrufende Anweisung bereits gelesen oder in die sie geschrieben hat.
Lösung:
Für Trigger, die bei Einfügevorgängen ausgelöst werden, wenn Sie Änderungen vornehmen möchten Wenn die Werte eingefügt werden, verwenden Sie einen BEFORE INSERT-Trigger und passen Sie die NEUEN Werte an.
Außerdem ist die im Trigger geschriebene Aktualisierungsanweisung:
fehlerhaft. Es aktualisiert die gesamte Tabelle und nicht nur eine einzelne Zeile. In diesem Szenario ist es effizienter, den PTS zum Zeitpunkt der Anzeige zu berechnen, anstatt eine eigene Spalte zu haben. Dadurch entfällt die Notwendigkeit eines Auslösers und das mit dem Auslöser verbundene Problem wird gelöst.Das obige ist der detaillierte Inhalt vonWarum kann mein MySQL-Trigger die PTS-Spalte nicht aktualisieren, nachdem die manuelle Ausführung erfolgreich war?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!