Auslöser für die Aktualisierung derselben Tabelle nach dem Einfügen: Ein alternativer Ansatz
Problemübersicht
Sie Versuchen Sie, einen Trigger für die Tabelle ACCOUNTS zu implementieren, der eine Spalte in derselben Tabelle basierend auf dem edit_on-Wert eines neu eingefügten Werts aktualisiert Reihe. Es tritt jedoch ein Fehler auf, da die Aktualisierung derselben Tabelle innerhalb eines Triggers, der sie aufgerufen hat, eingeschränkt ist.
Alternative Problemumgehung: Gespeicherte Prozedur
Um diese Einschränkung zu umgehen, Eine gespeicherte Prozedur kann verwendet werden, um sowohl den Einfüge- als auch den Aktualisierungsvorgang innerhalb einer einzigen Transaktion durchzuführen. Dieser Ansatz ermöglicht das manuelle Übertragen von Änderungen und ermöglicht so die gewünschten Aktualisierungen.
Implementierung gespeicherter Prozeduren
Hier ist ein Beispiel für eine gespeicherte Prozedur, mit der Sie Ihr Ziel erreichen:
DELIMITER $$ CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT) BEGIN -- Insert new row into ACCOUNTS INSERT INTO ACCOUNTS (pk, user_id, edit_on, status) VALUES (new_pk, /* user_id */, NULL, 'A'); -- Update existing row in ACCOUNTS UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on; -- Commit transaction COMMIT; END$$ DELIMITER ;
Verwendung
Um diese gespeicherte Prozedur zu verwenden, rufen Sie sie mit dem Primärschlüssel auf der neu eingefügten Zeile als Argument:
CALL InsertAndEditStatus(2147483726);
Diese Prozedur fügt eine neue Zeile mit dem angegebenen Primärschlüssel und den Standardwerten ein und aktualisiert dann die vorhandene Zeile, auf die durch die Spalte „edit_on“ in der neu eingefügten Zeile verwiesen wird, auf Geben Sie an, dass es bearbeitet wurde.
Das obige ist der detaillierte Inhalt vonWie kann ich dieselbe Tabelle nach einer Einfügung ohne Triggerfehler aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!