Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng trình kích hoạt MySQL để ghi lại tất cả các thay đổi của bảng vào một bảng phụ

Cú pháp chèn là

INSERT INTO table (columns_list) VALUES (values_list)

vì vậy phần chèn của bạn sẽ trông giống như thế này (tôi không phải là chuyên gia về MySQL nhưng bạn có thể phù hợp với truy vấn):

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

Và lặp lại nó cho các biến thể trên field2 và field3

Tôi nghĩ đây sẽ là trình kích hoạt hoàn chỉnh, vui lòng thử:

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. Cách nhập LARGE tệp sql vào bảng mysql

  2. MySQL Views và sử dụng chỉ mục

  3. MySQL LIMIT được áp dụng trước hay sau ORDER BY?

  4. đăng tên tệp đã đổi tên từ tải lên cơ sở dữ liệu

  5. Spark SQL và MySQL- SaveMode.Overwrite không chèn dữ liệu đã sửa đổi