MySQL-Trigger-Workaround für die Aktualisierung derselben Tabelle
MySQL schränkt Trigger von Natur aus bei der Aktualisierung von Zeilen in derselben Tabelle ein, der sie zugewiesen sind, und verhindert so rekursive Aufrufe . Trotz dieser Einschränkung gibt es eine praktikable Problemumgehung.
Vorgeschlagene Problemumgehung
Anstatt Zeilen innerhalb eines Triggers direkt zu aktualisieren, nutzen Sie eine gespeicherte Prozedur, die die gewünschte Logik ausführt. Diese Methode trennt die Zeilenaktualisierungsaufgabe vom Trigger und ermöglicht Ihnen, die Einschränkung zu umgehen.
Beispiel
Stellen Sie sich das folgende Szenario vor:
<code class="sql">CREATE TABLE MyTable ( id INT PRIMARY KEY, attribute VARCHAR(255) ); -- Trigger to insert a row into MyTable for each new parent product record CREATE TRIGGER my_trigger AFTER INSERT ON Products FOR EACH ROW BEGIN -- Issue SQL statement to call a stored procedure that performs the insert CALL insert_attribute(NEW.id, 'Value'); END;</code>
Im obigen Beispiel ruft der Trigger my_trigger die gespeicherte Prozedur insert_attribute auf, um eine Zeile in die MyTable einzufügen, wenn ein neuer Datensatz in die Products-Tabelle eingefügt wird, wodurch effektiv die Funktionalität einer direkten Zeilenaktualisierung innerhalb des Triggers nachgeahmt wird.
Zusätzliche Überlegungen
Diese Problemumgehung dient zwar als funktionale Lösung, es ist jedoch wichtig zu beachten, dass sie sich in Bezug auf Leistung und Wartbarkeit von einem herkömmlichen Auslöser unterscheidet. Gespeicherte Prozeduren können im Vergleich zu direkten Triggeraktualisierungen zu einem zusätzlichen Overhead und einer höheren Komplexität des Datenbanksystems führen.
Das obige ist der detaillierte Inhalt vonWie kann ich dieselbe Tabelle innerhalb eines MySQL-Triggers aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!