在mysql中使用触发器记录表的增删改所发生的数据前后变化存储到log表里
时间: 2024-03-27 20:37:36 浏览: 21
可以使用 MySQL 的触发器来实现记录表的增删改操作,并将数据变化存储到 log 表中。下面是一个示例:
首先创建一个 log 表来存储数据变化:
```sql
CREATE TABLE log (
id INT NOT NULL AUTO_INCREMENT,
table_name VARCHAR(50) NOT NULL,
action_type ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL,
before_data TEXT,
after_data TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
```
然后在需要记录变化的表上创建触发器。以记录 `user` 表为例:
```sql
CREATE TRIGGER user_log_insert
AFTER INSERT ON user
FOR EACH ROW
BEGIN
INSERT INTO log (table_name, action_type, after_data)
VALUES ('user', 'INSERT', JSON_OBJECT('id', NEW.id, 'name', NEW.name));
END;
CREATE TRIGGER user_log_update
AFTER UPDATE ON user
FOR EACH ROW
BEGIN
INSERT INTO log (table_name, action_type, before_data, after_data)
VALUES ('user', 'UPDATE',
JSON_OBJECT('id', OLD.id, 'name', OLD.name),
JSON_OBJECT('id', NEW.id, 'name', NEW.name)
);
END;
CREATE TRIGGER user_log_delete
AFTER DELETE ON user
FOR EACH ROW
BEGIN
INSERT INTO log (table_name, action_type, before_data)
VALUES ('user', 'DELETE', JSON_OBJECT('id', OLD.id, 'name', OLD.name));
END;
```
触发器会在插入、更新、删除数据时自动执行,将变化记录到 log 表中。在这个示例中,使用了 `JSON_OBJECT` 函数来将变化前后的数据转换为 JSON 对象存储到 `before_data` 和 `after_data` 字段中。您可以根据需要自定义记录的字段和格式。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)