在mysql中使用触发器记录表的增删改所发生的数据前后变化存储到log表里
时间: 2024-03-27 07:40:22 浏览: 12
在MySQL中,你可以使用触发器来记录表的增删改操作,并将变化存储到一个log表中。下面是一个记录表增删改操作的通用触发器模板:
```mysql
CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
INSERT INTO log_table (table_name, operation_type, old_data, new_data, operation_time)
VALUES ('table_name', 'insert', null, JSON_OBJECT(...), NOW());
END;
CREATE TRIGGER trigger_name
AFTER UPDATE ON table_name
FOR EACH ROW
BEGIN
INSERT INTO log_table (table_name, operation_type, old_data, new_data, operation_time)
VALUES ('table_name', 'update', JSON_OBJECT(...), JSON_OBJECT(...), NOW());
END;
CREATE TRIGGER trigger_name
AFTER DELETE ON table_name
FOR EACH ROW
BEGIN
INSERT INTO log_table (table_name, operation_type, old_data, new_data, operation_time)
VALUES ('table_name', 'delete', JSON_OBJECT(...), null, NOW());
END;
```
在这个模板中,你需要将`trigger_name`和`table_name`替换成你自己的触发器名称和表名。`log_table`是存储变化记录的表名,你需要根据你的实际情况来修改它。
在`INSERT`触发器中,你需要使用`JSON_OBJECT()`函数来将新数据转换为JSON格式,并将它插入到log表中。在`UPDATE`触发器中,你需要分别使用`OLD`和`NEW`关键字来获取旧数据和新数据,并使用`JSON_OBJECT()`函数将它们转换为JSON格式。在`DELETE`触发器中,你需要使用`OLD`关键字来获取旧数据,并使用`JSON_OBJECT()`函数将它转换为JSON格式。
在每个触发器中,`operation_type`字段用于记录操作类型(insert、update或delete),`operation_time`字段用于记录操作时间。你需要根据你的实际情况来修改这些字段名。
使用这个通用触发器模板,你可以记录表的增删改操作,并将变化存储到log表中。