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:
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;
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 der Tabelle nachgeahmt wird Trigger.
Zusätzliche Überlegungen
Diese Problemumgehung dient zwar als funktionale Lösung, ist es aber auch Es ist wichtig zu beachten, dass es sich in Bezug auf Leistung und Wartbarkeit von einem herkömmlichen Trigger unterscheidet. Gespeicherte Prozeduren können im Vergleich zu direkten Triggeraktualisierungen zu zusätzlichem Overhead und zusätzlicher Komplexität für das Datenbanksystem führen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3