sql >> Databasteknik >  >> RDS >> Mysql

Få OLD Value i MySQL Trigger EFTER uppdateringsutlåtande

I en UPDATE TRIGGER , kan du använda OLD nyckelord för att komma åt raddata som ersätts av uppdateringen. Den NEW nyckelordet tillåter åtkomst till inkommande raddata som kommer att ersätta den gamla raden, om den lyckas.

Ett exempel på en UPDATE utlösaren är:

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 här

Beroende på vilken typ av trigger som skapats, OLD och NEW rader kanske inte är tillgängliga för dig:

INSERT TRIGGER

  • Åtkomst till NEW Endast pseudo-rader.

UPPDATERA TRIGGER

  • Åtkomst till NEW och OLD pseudo-rader

RADERA TRIGGER

  • Endast åtkomst till OLD pseudo-rader

d.v.s. det finns ingen OLD rad på en INSERT trigger och ingen NEW rad på en DELETE utlösare.

OP:s fråga

OP har inte tillhandahållit den faktiska koden och felmeddelandet som hänvisas till i kommentarerna:

indikerar att OP oavsiktligt hade skapat en INSERT TRIGGER och inte en UPDATE TRIGGER som angavs i frågan. En INSERT triggern har ingen OLD pseudotabell.



  1. MySQL CSV-import:datetime-värde

  2. ORA-24550:signal mottagen:[si_signo=6] fel

  3. order by rand() får problem för stora inlägg

  4. Hur man uppdaterar flera kolumner i PostgreSQL