MySQL-Trigger: Werte für NEUE Zeile festlegen und eine andere in derselben Tabelle aktualisieren
In MySQL sind Trigger leistungsstarke Mechanismen, die es Ihnen ermöglichen Führen Sie bestimmte Aktionen aus, wenn bestimmte Ereignisse in einer Tabelle auftreten. Ein häufiger Anwendungsfall besteht darin, Werte für die neu eingefügte Zeile (NEW) festzulegen und gleichzeitig eine andere Zeile in derselben Tabelle zu aktualisieren. Beim Versuch dieses Vorgangs kann jedoch ein häufiger Fehler auftreten:
FEHLER 1442: Die Tabelle „Split“ 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.
Dieser Fehler tritt auf, weil ein Trigger nicht dieselbe Tabelle aktualisieren kann, von der aus er ausgelöst wurde. Um diese Einschränkung zu überwinden, folgen Sie diesem alternativen Ansatz:
Verwenden einer gespeicherten Prozedur:
Anstatt einen Trigger zu verwenden, erstellen Sie eine gespeicherte Prozedur, die die Einfüge- und Aktualisierungsvorgänge verarbeitet. Hier ist ein Beispiel:
<code class="sql">DELIMITER $$ CREATE PROCEDURE split_before_ins(IN startDate DATE, IN endDate DATE, IN tcOfficeFee DECIMAL, IN globalFee DECIMAL) BEGIN -- Insert a new row with the provided parameters INSERT INTO im.split (startDate, endDate, tcOfficeFee, globalFee) VALUES (startDate, endDate, tcOfficeFee, globalFee); -- Update the previous row's endDate UPDATE im.split SET endDate = DATE_SUB(startDate, INTERVAL 1 DAY) WHERE procKey = (SELECT procKey FROM im.split ORDER BY procKey DESC LIMIT 1) AND endDate = '20501231'; END$$ DELIMITER ;</code>
Prozedurverwendung:
Um die gespeicherte Prozedur aufzurufen, führen Sie Folgendes aus:
<code class="sql">CALL split_before_ins('2023-01-01', '2024-12-31', 10.00, 100.00);</code>
Diese gespeicherte Prozedur Mit diesem Ansatz können Sie die gewünschten Vorgänge in einem einzigen Transaktionskontext ausführen und so den Fehler vermeiden, der auftritt, wenn ein Trigger verwendet wird, um dieselbe Tabelle zu aktualisieren, von der aus er aufgerufen wurde.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine Zeile in derselben Tabelle, nachdem ich eine neue Zeile in MySQL eingefügt habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!