在java中使用触发器记录表的增删改所发生的数据前后变化存储到log表里
时间: 2024-03-27 10:38:42 浏览: 72
在Java中使用触发器记录表的增删改所发生的数据前后变化存储到log表里,可以按照以下步骤进行:
1. 在MySQL中创建一个log表,用于存储增删改所发生的数据前后变化,例如:
```
CREATE TABLE `log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`table_name` varchar(50) NOT NULL,
`operation` varchar(10) NOT NULL,
`old_data` varchar(255) DEFAULT NULL,
`new_data` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
```
2. 在MySQL中创建一个触发器,用于在表的增删改操作时将数据前后变化存储到log表中,例如:
```
CREATE TRIGGER `my_trigger`
AFTER INSERT ON `my_table` FOR EACH ROW
BEGIN
INSERT INTO `log` (`table_name`, `operation`, `new_data`)
VALUES ('my_table', 'insert', JSON_OBJECT('id', NEW.id, 'name', NEW.name, 'age', NEW.age));
END;
CREATE TRIGGER `my_trigger`
AFTER UPDATE ON `my_table` FOR EACH ROW
BEGIN
INSERT INTO `log` (`table_name`, `operation`, `old_data`, `new_data`)
VALUES ('my_table', 'update', JSON_OBJECT('id', OLD.id, 'name', OLD.name, 'age', OLD.age), JSON_OBJECT('id', NEW.id, 'name', NEW.name, 'age', NEW.age));
END;
CREATE TRIGGER `my_trigger`
AFTER DELETE ON `my_table` FOR EACH ROW
BEGIN
INSERT INTO `log` (`table_name`, `operation`, `old_data`)
VALUES ('my_table', 'delete', JSON_OBJECT('id', OLD.id, 'name', OLD.name, 'age', OLD.age));
END;
```
在这个示例中,我们分别创建了三个触发器,分别对应表的insert、update、delete操作。在触发器中,我们将表的操作类型、表名以及数据前后变化存储到log表中。
3. 在Java代码中执行增删改操作时,触发器会自动将数据前后变化存储到log表中,可以通过查询log表来获取数据的变化历史记录。
这样就可以在Java中使用触发器记录表的增删改所发生的数据前后变化存储到log表里了。
阅读全文