Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskaj STARĄ wartość w wyzwalaczu MySQL po oświadczeniu o aktualizacji

W UPDATE TRIGGER , możesz użyć OLD słowo kluczowe, aby uzyskać dostęp do danych wiersza, które są zastępowane przez aktualizację. NEW słowo kluczowe umożliwia dostęp do przychodzących danych wierszy, które zastąpią stary wiersz, jeśli się powiedzie.

Przykład UPDATE wyzwalacz to:

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 tutaj

W zależności od typu utworzonego wyzwalacza, OLD i NEW wiersze mogą być dla Ciebie niedostępne:

WSTAW SPUST

  • Dostęp do NEW tylko pseudo wiersze.

AKTUALIZUJ AKTUALIZACJĘ

  • Dostęp do NEW i OLD pseudo rzędy

USUŃ SPUST

  • Dostęp tylko do OLD pseudo rzędy

tzn. nie ma OLD wiersz na INSERT wyzwalacz i brak NEW wiersz na DELETE wyzwalacz.

Pytanie OP

OP nie podał rzeczywistego kodu i komunikatu o błędzie, o którym mowa w komentarzach:

wskazuje, że OP nieumyślnie utworzył INSERT TRIGGER a nie UPDATE TRIGGER jak wskazano w pytaniu. INSERT wyzwalacz nie ma OLD pseudotabela.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optymalizacja wydajności zapytań w MySQL

  2. Wprowadź moje php w mysql bez powtarzania?

  3. Snow Leopard + Ruby 1.9.1 + Klejnot MySQL =Ogromne problemy

  4. Jak przechowywać 128-bitową liczbę w jednej kolumnie w MySQL?

  5. zdobądź wszystkie elementy kategorii i jej dziecko