sql >> Databáze >  >> RDS >> Mysql

Získejte STAROU hodnotu v MySQL Trigger AFTER Update Statement

V UPDATE TRIGGER , můžete použít OLD klíčové slovo pro přístup k datům řádku, která jsou nahrazena aktualizací. NEW klíčové slovo umožňuje přístup k datům příchozího řádku, která v případě úspěchu nahradí starý řádek.

Příklad UPDATE spouštěč je:

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 zde

V závislosti na typu vytvořeného spouštěče OLD a NEW řádky vám nemusí být dostupné:

VLOŽTE SPUŠTĚČ

  • Přístup k NEW pouze pseudo řádky.

AKTUALIZOVAT TRIGGER

  • Přístup k NEW a OLD pseudo řádky

SMAZAT SPUŠTĚČ

  • Přístup pouze ke OLD pseudo řádky

tj. neexistuje žádný OLD řádek na INSERT spouštěč a žádné NEW řádek na DELETE spoušť.

Otázka OP

OP neposkytlo skutečný kód a chybovou zprávu uvedenou v komentářích:

označuje, že operační systém neúmyslně vytvořil INSERT TRIGGER a nikoli UPDATE TRIGGER jak bylo uvedeno v dotazu. INSERT spouštěč nemá OLD pseudo tabulka.



  1. MySQL JOIN s podmínkami IF

  2. proč tento dotaz mysql nefunguje?

  3. Aktualizujte řádek, ale vložte, pokud řádek v codeigniter neexistuje

  4. Oracle SQL Analytic dotaz – rekurzivní průběžný součet podobný tabulkovému procesoru