2016-11-18 5 views
1

Vielleicht bin ich nur dicht, aber hoffentlich kann jemand helfen. Ich versuche, einen Trigger für eine DateCreated-Spalte hinzuzufügen, die ausgelöst wird, wenn eine Zeile hinzugefügt wird. Wenn ich hinzufügen versuche ich bekommenMySQL-Trigger funktioniert nicht auf Tabelle einfügen

Tabelle kann nicht ‚Produkte‘ in gespeicherten Funktionen/Trigger aktualisiert werden, da es bereits von der Anweisung, die diese gespeicherte Funktion/Trigger

aufgerufen verwendet wird

ich von this answer realisieren das liegt daran, dass MySQL mich nach dem Einfügen wegen einer rekursiven Schleife nicht auslöst, aber mein Trigger hat das Update BEFORE und ich benutze NEW. Was verpasse ich meinen Auslöser? Außerdem, wenn ich ein DateModified machen wollte, was müsste ich ändern?

Trigger

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON `products` 
FOR EACH ROW UPDATE products SET DateEntered = NOW() WHERE ProductID = NEW.ProductID 
+0

Halten Sie einen Moment inne und fragen Sie sich: "Wo ist der Datensatzzeiger nach einer Aktualisierungsanweisung und wo muss er sein, um einen Insert-Trigger auszuführen", und Sie werden verstehen, warum Sie dies nicht tun können. Wenn das nicht hilft, fragen Sie sich: "Wie ist die Tabelle, die Zeile oder der Index für eine Einfügung gegen ein Update gesperrt?" TLDR: Sie können das nicht tun. Probieren Sie es mit einem AFTER-Trigger und Sie könnten damit durchkommen. –

Antwort

0

Ist ProductID ein eindeutiger Schlüssel in dieser Produkttabelle? Wenn ja, aktualisiert Ihr UPDATE im Grunde nur die Zeile, die den Trigger ausgelöst hat, richtig?

So ist es einfacher, dies zu tun:

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON `products` 
FOR EACH ROW SET NEW.DateEntered = NOW(); 

, dass der Wert der DateEntered Spalte in der Zeile nur, die den Trigger gelaicht wird sich ändern.

+0

Ah, Sie sind in beiden Punkten richtig. Das hat mein Problem gelöst. – john

0

AFTER INSERT. Selbst wenn dies funktioniert, besteht die Gefahr, dass Sie alle anderen Zeilen ändern und Ihr Insert aufgrund einer Constraint-Verletzung fehlschlägt.

Verwandte Themen