写一个记录数据库表增删改具体数据变化的mysql触发器,通用所有表
时间: 2024-03-26 07:41:55 浏览: 101
好的,以下是一个通用的记录数据库表增删改具体数据变化的MySQL触发器:
```
CREATE TRIGGER record_table_changes_trigger
AFTER INSERT ON `database`.`table`
FOR EACH ROW
BEGIN
INSERT INTO `database`.`table_changes`(`table_name`, `action`, `field_name`, `old_value`, `new_value`, `change_time`)
SELECT 'table', 'INSERT', column_name, NULL, NEW.column_name, NOW()
FROM information_schema.columns
WHERE table_name = 'table';
END;
CREATE TRIGGER record_table_changes_trigger
AFTER UPDATE ON `database`.`table`
FOR EACH ROW
BEGIN
INSERT INTO `database`.`table_changes`(`table_name`, `action`, `field_name`, `old_value`, `new_value`, `change_time`)
SELECT 'table', 'UPDATE', column_name, OLD.column_name, NEW.column_name, NOW()
FROM information_schema.columns
WHERE table_name = 'table';
END;
CREATE TRIGGER record_table_changes_trigger
AFTER DELETE ON `database`.`table`
FOR EACH ROW
BEGIN
INSERT INTO `database`.`table_changes`(`table_name`, `action`, `field_name`, `old_value`, `new_value`, `change_time`)
SELECT 'table', 'DELETE', column_name, OLD.column_name, NULL, NOW()
FROM information_schema.columns
WHERE table_name = 'table';
END;
```
该触发器会在插入、更新或删除表中的一条记录时,记录该操作具体的数据变化。例如,当更新一条记录时,该触发器会记录该记录中被修改的字段名、修改前的值和修改后的值。
注意:该触发器需要在每个需要记录变化的表上单独创建,且需要将 `database` 和 `table` 替换为实际的数据库名和表名。
阅读全文