Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir l'ANCIENNE valeur dans MySQL Trigger AFTER Update Statement

Dans un UPDATE TRIGGER , vous pouvez utiliser le OLD mot-clé pour accéder aux données de ligne qui sont remplacées par la mise à jour. Le NEW Le mot-clé permet d'accéder aux données de ligne entrantes qui remplaceront l'ancienne ligne, en cas de succès.

Un exemple de UPDATE le déclencheur est :

CREATE TRIGGER upd_check AFTER UPDATE ON SomeTable
    FOR EACH ROW
    BEGIN
       IF (OLD.LastChangedBy <> NEW.LastChangedBy) THEN
         INSERT INTO AuditSomeTable(ID, LastChangedBy) 
         VALUES (OLD.ID, OLD.LastChangedBy);
       END IF;
    END;

SQLFiddle ici

Selon le type de déclencheur créé, le OLD et NEW les lignes peuvent ne pas être disponibles :

INSÉRER LE DÉCLENCHEUR

  • Accès au NEW pseudo-lignes uniquement.

DÉCLENCHEUR DE MISE À JOUR

  • Accès au NEW et OLD pseudo-lignes

SUPPRIMER LE DÉCLENCHEUR

  • Accès uniquement à l'OLD pseudo-lignes

c'est-à-dire qu'il n'y a pas de OLD ligne sur un INSERT déclencheur, et pas de NEW ligne sur un DELETE déclencheur.

Question du PO

OP n'a pas fourni le code réel et le message d'erreur mentionné dans les commentaires :

indique que l'OP a créé par inadvertance un INSERT TRIGGER et non un UPDATE TRIGGER comme indiqué dans la question. Un INSERT le déclencheur n'a pas de OLD pseudo-table.