MySQL 使用触发器记录用户的操作日志

目录

  • MySQL 使用触发器记录用户的操作日志
    • 一、创建用户数据表(emp)和保存操作日志的表(emp_log)
    • 二、为 emp 表创建触发器
      • 1、创建触发器 trigger_after_insert_emp
      • 2、创建触发器 trigger_after_update_emp
      • 3、创建触发器 trigger_after_delete_emp
    • 三、数据验证
      • 1、在 emp 中添加数据记录
      • 2、在 emp 中更新数据记录
      • 3、在 emp 中删除数据记录

使用 MySQL 触发器可以记录哪些用户、什么时间对数据表进行了增、删、改操作。如果执行删除操作,则记录删除之前的数据记录;如果执行更新操作,记录更新之前的数据记录。

一、创建用户数据表(emp)和保存操作日志的表(emp_log)

-- 创建用户数据表:emp
DROP TABLE IF EXISTS  `emp`;
CREATE TABLE `emp` (`emp_id` int(11) AUTO_INCREMENT COMMENT '员工id',`emp_name` char(50) NOT NULL DEFAULT '' COMMENT '员工姓名',`birth` date COMMENT '出生日期',`salary` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '工资',`comm` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '奖金',`phone` char(20) NOT NULL DEFAULT '' COMMENT '电话',`addr` varchar(200) NOT NULL DEFAULT '' COMMENT '地址',`created_at`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '插入记录的时间',`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '最后更新记录的时间',PRIMARY KEY (`emp_id`),KEY `idx_empname` (`emp_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '员工信息数据表';-- 查看表结构
mysql> desc emp;
+------------+---------------+------+-----+-------------------+------------------------+
| Field      | Type          | Null | Key | Default           | Extra                  |
+------------+---------------+------+-----+-------------------+------------------------+
| emp_id     | int(11)       | NO   | PRI | NULL              | auto_increment         |
| emp_name   | char(50)      | NO   | MUL |                   |                        |
| birth      | date          | YES  |     | NULL              |                        |
| salary     | decimal(10,2) | NO   |     | 0.00              |                        |
| comm       | decimal(10,2) | NO   |     | 0.00              |                        |
| phone      | char(20)      | NO   |     |                   |                        |
| addr       | varchar(200)  | NO   |     |                   |                        |
| created_at | timestamp     | NO   |     | CURRENT_TIMESTAMP |                        |
| updated_at | timestamp     | NO   |    | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+---------------+------+-----+-------------------+------------------------+
9 rows in set (0.00 sec)-- 创建操作日志表:emp_log
DROP TABLE IF EXISTS  `emp_log`;
CREATE TABLE `emp_log` (`emplog_id` int(11) AUTO_INCREMENT COMMENT '操作日志id',`operate_type` char(20) COMMENT '操作类型:insert(插入)、delete(删除)、update(更新)',`operate_user` char(50) COMMENT '执行操作的用户名称',`operate_time` datetime COMMENT '操作时间',`emp_id` int(11) COMMENT '员工id',`emp_name` char(50) COMMENT '员工姓名',`birth` date COMMENT '出生日期',`salary` decimal(10,2) COMMENT '工资',`comm` decimal(10,2) COMMENT '奖金',`phone` char(20) COMMENT '电话',`addr` varchar(200) COMMENT '地址',PRIMARY KEY (`emplog_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '员工操作日志信息表';-- 查看表结构
mysql> desc emp_log;
+--------------+---------------+------+-----+---------+----------------+
| Field        | Type          | Null | Key | Default | Extra          |
+--------------+---------------+------+-----+---------+----------------+
| emplog_id    | int(11)       | NO   | PRI | NULL    | auto_increment |
| operate_type | char(20)      | YES  |     | NULL    |                |
| operate_user | char(50)      | YES  |     | NULL    |                |
| operate_time | datetime      | YES  |     | NULL    |                |
| emp_id       | int(11)       | YES  |     | NULL    |                |
| emp_name     | char(50)      | YES  |     | NULL    |                |
| birth        | date          | YES  |     | NULL    |                |
| salary       | decimal(10,2) | YES  |     | NULL    |                |
| comm         | decimal(10,2) | YES  |     | NULL    |                |
| phone        | char(20)      | YES  |     | NULL    |                |
| addr         | varchar(200)  | YES  |     | NULL    |                |
+--------------+---------------+------+-----+---------+----------------+
11 rows in set (0.01 sec)

二、为 emp 表创建触发器

1、创建触发器 trigger_after_insert_emp

在 emp 表中插入记录时,把执行插入操作的用户名、操作类型(INSERT)、操作时间以及记录的内容添加到操作日志表(emp_log)中。

DROP TRIGGER IF EXISTS `trigger_after_insert_emp`;delimiter //
create trigger trigger_after_insert_emp
after insert on emp
for each row
begin
insert into emp_log(operate_type,operate_user,operate_time,emp_id,emp_name,birth,salary,comm,phone,addr
)
values('INSERT',user(),now(),new.emp_id,new.emp_name,new.birth,new.salary,new.comm,new.phone,new.addr
);
end //
delimiter ;

2、创建触发器 trigger_after_update_emp

在 emp 表中更新记录时,把执行更新操作的用户名、操作类型(UPDATE)、操作时间以及更新之前记录的内容添加到操作日志表(emp_log)中。

DROP TRIGGER IF EXISTS `trigger_after_update_emp`;delimiter //
create trigger trigger_after_update_emp
after update on emp
for each row
begin
insert into emp_log(operate_type,operate_user,operate_time,emp_id,emp_name,birth,salary,comm,phone,addr
)
values('UPDATE',user(),now(),old.emp_id,old.emp_name,old.birth,old.salary,old.comm,old.phone,old.addr
);
end //
delimiter ;

3、创建触发器 trigger_after_delete_emp

在 emp 表中删除记录时,把执行删除操作的用户名、操作类型(DELETE)、操作时间以及删除之前记录的内容添加到操作日志表(emp_log)中。

DROP TRIGGER IF EXISTS `trigger_after_delete_emp`;delimiter //
create trigger trigger_after_delete_emp
after delete on emp
for each row
begin
insert into emp_log(operate_type,operate_user,operate_time,emp_id,emp_name,birth,salary,comm,phone,addr
)
values('DELETE',user(),now(),old.emp_id,old.emp_name,old.birth,old.salary,old.comm,old.phone,old.addr
);
end //
delimiter ;

三、数据验证

1、在 emp 中添加数据记录

/*
insert into emp(emp_name,birth,salary,comm,phone,addr)
values('刘红','1988-12-3',5000,1200,'13673521212','河南省新乡市'),
('王涛','1984-8-21',6000,700,'13755440012','河南省郑州市'),
('张静','1992-10-31',5500,800,'13073526644','河南省安阳市');
*/
mysql> insert into emp(emp_name,birth,salary,comm,phone,addr) -> values('刘红','1988-12-3',5000,1200,'13673521212','河南省新乡市'),-> ('王涛','1984-8-21',6000,700,'13755440012','河南省郑州市'),-> ('张静','1992-10-31',5500,800,'13073526644','河南省安阳市');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0-- 查询 emp 表中的数据
mysql> select * from emp;
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
| emp_id | emp_name | birth      | salary  | comm    | phone       | addr               | created_at          | updated_at          |
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
|      1 | 刘红     | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新乡市       | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
|      2 | 王涛     | 1984-08-21 | 6000.00 |  700.00 | 13755440012 | 河南省郑州市       | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
|      3 | 张静     | 1992-10-31 | 5500.00 |  800.00 | 13073526644 | 河南省安阳市       | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
3 rows in set (0.00 sec)-- 查询 emp_log 表中的数据
mysql> select * from emp_log;
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
| emplog_id | operate_type | operate_user   | operate_time        | emp_id | emp_name | birth      | salary  | comm    | phone       | addr               |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
|         1 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      1 | 刘红     | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新乡市       |
|         2 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      2 | 王涛     | 1984-08-21 | 6000.00 |  700.00 | 13755440012 | 河南省郑州市       |
|         3 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      3 | 张静     | 1992-10-31 | 5500.00 |  800.00 | 13073526644 | 河南省安阳市       |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
3 rows in set (0.01 sec)

2、在 emp 中更新数据记录

-- 更新 emp 表中的数据(更新了两条记录)
mysql> update emp set salary = salary + 1000 where salary < 6000;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0-- 查询 emp 表中的数据
mysql> select * from emp;
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
| emp_id | emp_name | birth      | salary  | comm    | phone       | addr               | created_at          | updated_at          |
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
|      1 | 刘红     | 1988-12-03 | 6000.00 | 1200.00 | 13673521212 | 河南省新乡市       | 2022-12-04 15:40:08 | 2022-12-04 15:47:56 |
|      2 | 王涛     | 1984-08-21 | 6000.00 |  700.00 | 13755440012 | 河南省郑州市       | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
|      3 | 张静     | 1992-10-31 | 6500.00 |  800.00 | 13073526644 | 河南省安阳市       | 2022-12-04 15:40:08 | 2022-12-04 15:47:56 |
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
3 rows in set (0.00 sec)-- 查询 emp_log 表中的数据
mysql> select * from emp_log;
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
| emplog_id | operate_type | operate_user   | operate_time        | emp_id | emp_name | birth      | salary  | comm    | phone       | addr               |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
|         1 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      1 | 刘红     | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新乡市       |
|         2 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      2 | 王涛     | 1984-08-21 | 6000.00 |  700.00 | 13755440012 | 河南省郑州市       |
|         3 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      3 | 张静     | 1992-10-31 | 5500.00 |  800.00 | 13073526644 | 河南省安阳市       |
|         4 | UPDATE       | root@localhost | 2022-12-04 15:47:56 |      1 | 刘红     | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新乡市       |
|         5 | UPDATE       | root@localhost | 2022-12-04 15:47:56 |      3 | 张静     | 1992-10-31 | 5500.00 |  800.00 | 13073526644 | 河南省安阳市       |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
5 rows in set (0.01 sec)

3、在 emp 中删除数据记录

-- 删除 emp 表中的数据(删除了两条记录)
mysql> delete from emp where salary = 6000;
Query OK, 2 rows affected (0.02 sec)-- 查询 emp 表中的数据
mysql> select * from emp;
+--------+----------+------------+---------+--------+-------------+--------------------+---------------------+---------------------+
| emp_id | emp_name | birth      | salary  | comm   | phone       | addr               | created_at          | updated_at          |
+--------+----------+------------+---------+--------+-------------+--------------------+---------------------+---------------------+
|      3 | 张静     | 1992-10-31 | 6500.00 | 800.00 | 13073526644 | 河南省安阳市       | 2022-12-04 15:40:08 | 2022-12-04 15:47:56 |
+--------+----------+------------+---------+--------+-------------+--------------------+---------------------+---------------------+
1 row in set (0.00 sec)-- 查询 emp_log 表中的数据
mysql> select * from emp_log;
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
| emplog_id | operate_type | operate_user   | operate_time        | emp_id | emp_name | birth      | salary  | comm    | phone       | addr               |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
|         1 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      1 | 刘红     | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新乡市       |
|         2 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      2 | 王涛     | 1984-08-21 | 6000.00 |  700.00 | 13755440012 | 河南省郑州市       |
|         3 | INSERT       | root@localhost | 2022-12-04 15:40:08 |      3 | 张静     | 1992-10-31 | 5500.00 |  800.00 | 13073526644 | 河南省安阳市       |
|         4 | UPDATE       | root@localhost | 2022-12-04 15:47:56 |      1 | 刘红     | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新乡市       |
|         5 | UPDATE       | root@localhost | 2022-12-04 15:47:56 |      3 | 张静     | 1992-10-31 | 5500.00 |  800.00 | 13073526644 | 河南省安阳市       |
|         6 | DELETE       | root@localhost | 2022-12-04 15:52:21 |      1 | 刘红     | 1988-12-03 | 6000.00 | 1200.00 | 13673521212 | 河南省新乡市       |
|         7 | DELETE       | root@localhost | 2022-12-04 15:52:21 |      2 | 王涛     | 1984-08-21 | 6000.00 |  700.00 | 13755440012 | 河南省郑州市       |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
7 rows in set (0.00 sec)

MySQL 使用触发器记录用户的操作日志相关推荐

  1. mysql userstat_mysql 中记录用户登录错误日志方法小结

    如何myql server 中,记录用户登录失败的次数,也是很重要的,在mysql 5.x系列中,暂时可以通过配置文件中my.ini设置的方法进行设置,小结如下: 1 general_log_file ...

  2. tp5记录用户的操作日志_【干货】日志管理与分析(四)日志管理规程

    接<日志管理与分析(三)--对日志系统的攻击>,如果你的企业没有认真地对待日志,那么就可以说明你的企业对IT可审核性并不重视,这也就是日志记录成为一种完善的依从性技术,许多法规和法律以及最 ...

  3. python-- 模拟淘宝自动回复--文件读写的问题//记录用户的登录日志(记录登录时间)

    记录用户的登录日志(记录登录时间)--磁盘的操作--文件读写的操作 import time #使用函数 --使用时间 #显示日志 def show_info():print('输入提示数字,执行相应的 ...

  4. RHEL 8 - 记录用户会话操作

    <OpenShift 4.x HOL教程汇总> 已在 RHEL 8.4 上验证 本文的前置条件:RHEL 8 - 安装 webconsole 文章目录 安装Session Recordin ...

  5. spring - AOP(6)- 记录后台管理员操作日志

    一.需求 1.1 问题 后台一些涉及到新增.编辑.删除等敏感操作的需要记录下操作日志,包含操作人.操作内容.请求参数等等信息. 1.2 思路 统一对Controller层的方法进行拦截,记录下请求信息 ...

  6. MySQL误删数据后,查找操作日志并恢复数据

    有时候直接操作数据库,可能会出现误删除一些数据的情况,比如删了某个表中某一行数据,事后发现该条数据是误删的,还需要恢复,但是又不太记得具体每个字段原来的数据是什么了,只能要查到之前删掉的数据每个字段值 ...

  7. Kafka学习笔记——使用Kafka记录APP的操作日志

    上一篇文章我们讲到了Kafka的工作原理和如何使用Kafka的代码示例,这里我们开始讲解Kafka的实战,在实际的应用中我们如何使用kafka的.下面将介绍前台的操作日志定时推送到kafka,然后通过 ...

  8. MYSQL触发器记录用户操作的命令

    假如有一张重要的表btb,需要几个管理员来管理 管理员:ma1@localhost.ma2@localhost.ma3@localhost 要求给表btb创建触发器: trigger触发器需求: 1. ...

  9. tomcat mysql报错日志在哪_mysql 中记录用户登录错误日志...-Tomcat远程调试-java书上小例子6_169IT.COM...

    接口:  java不支持多继承性,即一个类只能有一个父类,单继承性使得java简单,易于管理程序,为了克服单继承的缺点,java使用接口,一个类可以使用多个接口 使用 interface来定义接口 接 ...

最新文章

  1. 数据结构中等号表示什么_通过分析2016年最重要的252个中等故事我学到了什么...
  2. ios html 有白色边框,html – 仅在iPad上的桌子的单元格之间非常薄的白色边框
  3. CentOS7.X更新gcc到5.3.0
  4. php截取中文字符串时乱码问题
  5. 阿里云上测试服务器的搭建
  6. python画图如何调整图例位置_matplotlib中legend位置调整解析
  7. 谭浩强课后题(数组篇)
  8. 【Python3网络爬虫开发实战】1.5.1-PyMySQL的安装
  9. PyTorch 1.0 中文官方教程:使用ONNX将模型从PyTorch传输到Caffe2和移动端
  10. POJ_3984迷宫问题(bfs基础题)
  11. harmonyos电脑系统下载,harmonyos系统下载
  12. 怎么查看网站的服务器ip,怎样查看某个网站的IP地址
  13. 我的缅甸往事(二) | 惊魂南塘河
  14. kangle安装php7.0_【Kangle】Linux下EasyPanel及PHP安装升级
  15. vsftp 多用户不同访问权限配置
  16. ZZULIOJ:1141: 进制转换
  17. 独立游戏——《爱与正义》准备开工啦!
  18. Datawhale-数据分析-泰坦尼克-第一单元
  19. LeetCode:167. 两数之和 II - 输入有序数组(java)
  20. 【tkinter】的使用详解,做一个简单实用的万能可视化界面!

热门文章

  1. Catalan numbers
  2. AI 教父离职谷歌 ,只为畅谈 AI 之危
  3. 你知道聊天软件也分类吗?
  4. RM1135+HY3DV6开卡成功,估计比YS9082HC+N38A……
  5. Oracle sysdate加减
  6. linux环境下c语言调用lapack,linux系统下C语言调用lapack ,blas库
  7. android 自定义searchview,自定义searchview包括修改图标样式
  8. lio-sam中雅克比推导
  9. TCP协议详解及交换机路由器概念
  10. i春秋CTF训练营Rotated!解题思路及其过程。