Die Begegnung mit einem nicht reagierenden MySQL-Trigger kann frustrierend sein, insbesondere wenn die Abfrage bei manueller Ausführung einwandfrei funktioniert. In solchen Szenarien liegt das Problem oft in der Syntax des Triggers oder den durch gespeicherte Funktionen und Trigger auferlegten Einschränkungen.
Die bereitgestellte Trigger-Syntax scheint unkompliziert und folgt dem erwarteten Muster. Es ist jedoch wichtig, die Platzierung von Klammern und Semikolons noch einmal zu überprüfen, um sicherzustellen, dass sie richtig platziert sind und keine syntaktischen Fehler verursachen.
Eine der wichtigsten Einschränkungen für Beachten Sie bei der Verwendung gespeicherter Funktionen und Trigger, dass diese nicht in der Lage sind, Tabellen zu ändern, die derzeit von der aufrufenden Anweisung verwendet werden. Diese Einschränkung ist in der Dokumentation klar umrissen:
<code class="text">"A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."</code>
Im bereitgestellten Trigger wird die Anweisung update pos_table set PTS=((NEW.won_games*2) (NEW.tie_games*1)); versucht, dieselbe Tabelle (pos_table) zu aktualisieren, die vom Trigger geändert wird (wie er bei UPDATE auf pos_table ausgelöst wird). Dieser Verstoß gegen die oben genannte Einschränkung führt zu dem Fehler, der beim manuellen Bearbeiten der Spalte „played_games“ auftritt.
Um die durch gespeicherte Funktions-/Triggerbeschränkungen auferlegte Einschränkung zu umgehen, wird empfohlen, die Verwendung in Betracht zu ziehen einen anderen Triggertyp, z. B. BEFORE INSERT, wenn Sie Werte während des Einfügens ändern möchten. In diesem speziellen Fall kann die Berechnung des PTS jedoch direkt bei der Anzeige der Werte durchgeführt werden, sodass kein gespeicherter Trigger oder eine gespeicherte Funktion erforderlich ist. Dieser Ansatz vereinfacht den Code und vermeidet potenzielle Konflikte mit gespeicherten Funktions-/Trigger-Einschränkungen.
Das obige ist der detaillierte Inhalt vonWarum funktioniert mein MySQL-Trigger nicht: Liegt es an einem Syntaxfehler oder an einer Einschränkung gespeicherter Funktionen/Trigger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!