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

Używanie wyzwalaczy MySQL do rejestrowania wszystkich zmian w tabeli w tabeli dodatkowej

Składnia wstawiania to

INSERT INTO table (columns_list) VALUES (values_list)

więc twoja wstawka będzie wyglądać mniej więcej tak (nie jestem ekspertem MySQL, ale możesz dopasować zapytanie):

INSERT INTO data_tracking 
(`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
VALUES 
(NEW.data_id, 'field1', OLD.field, NEW.field, CURRENT_DATETIME());

I powtórz to dla wariacji na polu 2 i polu 3

Myślę, że to byłby kompletny wyzwalacz, spróbuj:

DELIMITER $$

DROP TRIGGER `update_data `$$

CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
    IF (NEW.field1 != OLD.field1) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field1", OLD.field1, NEW.field1, NOW());
    END IF;
    IF (NEW.field2 != OLD.field2) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field2", OLD.field2, NEW.field2, NOW());
    END IF;
    IF (NEW.field3 != OLD.field3) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field3", OLD.field3, NEW.field3, NOW());
    END IF;
END$$

DELIMITER ;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pominąć kolumny w pliku CSV podczas importu do tabeli MySQL za pomocą funkcji LOAD DATA INFILE?

  2. Jaka jest różnica między typami ciągów VARCHAR(255) i TINYTEXT w MySQL?

  3. nieoczekiwany T_ENCAPSED_AND_WHITESPACE, oczekiwany błąd T_STRING lub T_VARIABLE lub T_NUM_STRING

  4. MySQL:Grupuj według i policz wiele pól

  5. Jak powiązać jedną tabelę z wieloma różnymi tabelami?