Heim  >  Artikel  >  Datenbank  >  Warum kann mein MySQL-Trigger die PTS-Spalte nicht aktualisieren, nachdem die manuelle Ausführung erfolgreich war?

Warum kann mein MySQL-Trigger die PTS-Spalte nicht aktualisieren, nachdem die manuelle Ausführung erfolgreich war?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 07:05:02746Durchsuche

Why Is My MySQL Trigger Failing to Update the PTS Column After Manual Execution Succeeds?

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!

Stellungnahme:
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