ALT-Wert in der MySQL-Trigger NACH der Update-Anweisung
Habe ich den folgenden MySQL-Trigger
SET @iUserId = OLD.LastChangedBy;
IF NOT NEW.LastChangedBy <=> OLD.LastChangedBy THEN
SET @iUserId = NEW.LastChangedBy;
END IF;
IF NOT NEW.BookingId<=> OLD.BookingId THEN
INSERT INTO AuditTrail VALUES (UUID(),@iUserId,'UPDATE','Booking', OLD.BookingId,'BookingType ',OLD.BookingType ,NEW.BookingType ,NOW());
END IF;
Dieser heißt CREATE TRIGGER Booking_AUPD
NACH dem UPDATE bei der Buchung FÜR JEDE ZEILE
Das problem das ich habe ist, wie bekomme ich den ALTEN Feldwert in einen AFTER UPDATE-trigger ?
Es ist nicht klar, was Sie Fragen. Die Werte der Spalten, wie Sie vor einem UPDATE, in der AFTER UPDATE-trigger, Referenz
Ja genau das. Ich update das Feld BookingType, und ich brauche, um den ALTEN Wert von BookingType in der AFTER UPDATE-Trigger. Ist das möglich ?
Ja, der Verweis auf
Ja, das ist, was ich versucht habe aber bei Anwendung der Trigger bekomme ich "Es gibt keine ALTEN Zeile im on INSERT-trigger"
wenn du die eigentliche Fehlermeldung, die zurückgegeben wird, und vorsehen, dass in der Frage, das wird gehen ein lange Wege zu zerstreuen Mehrdeutigkeit und helfen, Sie bekommen eine Antwort auf Ihre Frage.
OLD.col_name
, so wie dein Beispiel-code ist wie mit den verweisen zu OLD.LastChangedBy
, OLD.BookingID
, et al.Ja genau das. Ich update das Feld BookingType, und ich brauche, um den ALTEN Wert von BookingType in der AFTER UPDATE-Trigger. Ist das möglich ?
Ja, der Verweis auf
OLD.BookingType
in Ihrem Körper auslösen, wird der Wert der BookingType
Spalte für die Zeile, wie es war, bevor die update-Anweisung ausgeführt wurde. Diese Bezugnahme ist in der values-Klausel der INSERT-Anweisung. (Ich muss noch nicht verstehen, was Sie gefragt haben. Wir beachten Sie, dass INSERT nur ausgeführt werden, wenn die NEUEN und ALTEN Werte der BookingId Spalte unterschiedlich sind.)Ja, das ist, was ich versucht habe aber bei Anwendung der Trigger bekomme ich "Es gibt keine ALTEN Zeile im on INSERT-trigger"
wenn du die eigentliche Fehlermeldung, die zurückgegeben wird, und vorsehen, dass in der Frage, das wird gehen ein lange Wege zu zerstreuen Mehrdeutigkeit und helfen, Sie bekommen eine Antwort auf Ihre Frage.
InformationsquelleAutor neildt | 2013-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die wahrscheinlichste Erklärung für die Fehlermeldung erhalten
ist, dass Sie der Ausführung einer Anweisung, die das erstellen einer
AFTER INSERT
auslösen, anstatt die Schaffung einerAFTER UPDATE
auslösen.Den Grund, dass man nicht Referenz, die ALTEN Werte aus der Zeile, die Zeile, den es vor der INSERT -, ist, dass die Zeile nicht existiert, vor dem EINFÜGEN.
InformationsquelleAutor spencer7593
In einem
UPDATE-TRIGGER
, können Sie dieOLD
- Schlüsselwort, um den Zugriff auf die row-Daten die durch das update ersetzt. DieNEW
Schlüsselwort ermöglicht den Zugriff auf die eingehende Zeile die Daten an die Stelle der alten Zeile, wenn Sie erfolgreich ist.Ein Beispiel für eine
UPDATE
trigger:SQLFiddle hier
Je nach Art des trigger erstellt, der
OLD
undNEW
Zeilen möglicherweise nicht für Sie verfügbar sind:INSERT-TRIGGER
NEW
pseudo Zeilen nur.UPDATE-TRIGGER
NEW
undOLD
pseudo ZeilenDELETE-TRIGGER
OLD
pseudo Zeilend.h. es gibt keine
OLD
Zeile auf einerINSERT
auslösen, und keineNEW
Zeile auf einerDELETE
auslösen.OP ' s Frage
OP nicht vorgesehen, der eigentliche code und der Fehlermeldung genannten in den Kommentaren:
zeigt an, dass der OP hatte versehentlich erstellt eine
INSERT TRIGGER
und nicht einUPDATE TRIGGER
wie in der Frage. EinINSERT
trigger hat keineOLD
pseudo-Tabelle.InformationsquelleAutor StuartLC
Im Körper auslösen, die ALTEN und NEUEN keywords, die Ihnen den Zugriff auf Spalten der betroffenen Zeilen durch einen trigger. ALT und NEU sind MySQL-Erweiterungen zu Triggern; Sie sind nicht case sensitive.
In einen INSERT-trigger, nur NEUE.col_name benutzt werden kann; es gibt keine alten Zeile. In einem DELETE-trigger nur OLD.col_name benutzt werden kann; es wird keine neue Zeile. In einem UPDATE-trigger verwenden, können Sie ALT.col_name verweisen auf die Spalten einer Zeile, bevor Sie aktualisiert werden und NEUE.col_name, auf die Spalten der Reihe nach aktualisiert wird.
InformationsquelleAutor Gaurav Kumar
Wenn ich Ihre Frage richtig..
Die Antwort ist Nein! Sie kann nicht ALT.col_name in einen AFTER UPDATE-trigger.
Für Ihre Referenz in der mysql-ref-Handbuch ist es eindeutig bestimmt :
Trigger Syntax
InformationsquelleAutor edam