Heim > Datenbank > MySQL-Tutorial > Wie kann ich dieselbe Tabelle innerhalb eines MySQL-Triggers nach einer INSERT-Operation aktualisieren?

Wie kann ich dieselbe Tabelle innerhalb eines MySQL-Triggers nach einer INSERT-Operation aktualisieren?

Linda Hamilton
Freigeben: 2024-12-20 11:16:10
Original
774 Leute haben es durchsucht

How Can I Update the Same Table Within a MySQL Trigger After an INSERT Operation?

Trigger-Einschränkungen in MySQL: Aktualisieren derselben Tabelle

MySQL-Trigger bieten einen Mechanismus zum Ausführen automatisierter Aktionen basierend auf Datenbankereignissen. Es gibt jedoch Einschränkungen bei der Verwendung von Triggern zum Aktualisieren derselben Tabelle, in der das Ereignis seinen Ursprung hat. Dies liegt an der Einschränkung, die verhindert, dass ein Trigger eine Tabelle ändert, die bereits von der Anweisung verwendet wird, die den Trigger aufgerufen hat.

Problembeschreibung

Im bereitgestellten In diesem Szenario besteht die Aufgabe darin, eine bestimmte Zeile in einer ACCOUNTS-Tabelle zu aktualisieren, wenn eine neue Zeile in dieselbe Tabelle eingefügt wird. Die Aktualisierung muss jedoch für eine vorhandene Zeile durchgeführt werden, in der der Primärschlüssel (pk) mit dem edit_on-Wert der neuen Zeile übereinstimmt.

Trigger-Implementierung

Der vorgeschlagene Trigger Die Syntax zielt darauf ab, diese Anforderung zu erfüllen:

DELIMITER $$

DROP TRIGGER IF EXISTS `setEditStatus`$$
CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS
FOR EACH ROW BEGIN
    update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ;
END$$

DELIMITER ;
Nach dem Login kopieren

Ausführung Fehler

Leider führt die Ausführung dieses Triggers aufgrund der zuvor erwähnten Einschränkung zu einem Fehler: „Tabelle KONTEN kann nicht aktualisiert werden ... wird bereits von der Anweisung verwendet, die diesen Trigger aufgerufen hat.“

Problemumgehung mithilfe einer gespeicherten Prozedur

Da Trigger für diesen Zweck nicht verwendet werden können, besteht ein alternativer Ansatz darin, eine zu erstellen gespeicherte Prozedur. Eine gespeicherte Prozedur ermöglicht mehrere Vorgänge innerhalb einer einzelnen Transaktion, einschließlich des Einfügens in die Tabelle ACCOUNTS und der Aktualisierung der vorhandenen Zeile.

Das Folgende ist eine gespeicherte Beispielprozedur, die die Aufgabe erfüllt:

CREATE PROCEDURE `updateAccountStatus` (IN NEW_ROW_ID INT)
BEGIN
    -- Insert into the ACCOUNTS table
    INSERT INTO ACCOUNTS (user_id, edit_on, status)
    VALUES (NEW.user_id, NEW.edit_on, 'A');

    -- Update the existing row
    UPDATE ACCOUNTS SET status = 'E' WHERE pk = NEW_ROW_ID;

    -- Commit the changes
    COMMIT;
END
Nach dem Login kopieren

Durch Aufrufen der gespeicherten Prozedur mit der ID der neu eingefügten Zeile können sowohl die Einfüge- als auch die Aktualisierungsoperation in einer einzigen Transaktion ausgeführt werden, wodurch die Triggerbeschränkung umgangen wird.

Das obige ist der detaillierte Inhalt vonWie kann ich dieselbe Tabelle innerhalb eines MySQL-Triggers nach einer INSERT-Operation aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage