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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

假如有一张重要的表btb,需要几个管理员来管理

管理员:ma1@localhost、ma2@localhost、ma3@localhost


要求给表btb创建触发器:

trigger触发器需求:

   1、当在btb表中做insert、update、delete操作时,在btb_trace表中记录执行操作的用户、时间、操作命令。

   1、当在btb表中插入新记录时,atb_bak表中会将atb表中的所有数据记录下来。保持同步备份。

   2、当在btb表中删除数据前,在atb_del表中将atb删除的数据记录一份。

   3、当在btb表中更新数据时,在atb_update表中将atb数据更新前后的数据记录一份。

修改版(优化)

说明:触发器中用new和old来向触发器操作的表中传递数据。new表示操作字段的新值(用于insert和update触发事件),old表示字段的旧值(用于delete触发事件)。

格式:new.字段名      ;old.字段名。

创建用户:

grant  all   on  *.*   to   ma1@'%'  identified  by   'ma1'  with  grant   option;

grant  all   on  *.*   to   ma2@'%'  identified  by   'ma2'  with  grant   option;

grant  all   on  *.*   to   ma3@'%'  identified  by   'ma3'  with  grant   option;

flush  privileges;

select  user,host,password   from   mysql.user;

 

创建与atb表结构相同的5张表:

use  test

create  table   btb(id  int,name  varchar(50));

create table btb_trace(name varchar(50),time varchar(50),act  varchar(20),id  varchar(20),sname  varchar(50));

create  table  btb_bak(user  varchar(100),id  int,name   varchar(50),del_time  varchar(50));

create  table  btb_del(user  varchar(100),id  int,name   varchar(50),del_time  varchar(50));

create  table  btb_update(user  varchar(100),id  int,name   varchar(50),del_time  varchar(50));

insert into btb_trace (name,time,act,id,sname) values(user(),now(),'insert',0,  'root');

select  *   from   btb_trace;

 

删除旧触发器:

show    triggers \G

drop   trigger    insert_btb;

drop   trigger    delete_btb;

drop   trigger    update_btb;

 

触发器1(insert触发事件):

\d  $$

create  trigger insert_btb after  insert on  btb

for  each row

begin

insert  into btb_trace (name,time,act,id,sname) values(user(),now(),'insert',new.id,new.name);

insert  into    btb_bak  values(user(),new.id,new.name,now());

end

$$

\d  ;

 

触发器2(delete触发事件):

\d  $$

create  trigger delete_btb  before  delete on   btb

for  each row

begin

insert  into btb_trace (name,time,act,id,sname) values(user(),now(),'delete',old.id,old.name);

insert  into btb_del values(user(),old.id,old.name,now());

end

$$

\d  ;

 

触发器3(update触发事件):

\d  $$

create  trigger update_btb after  update on  btb

for  each row

begin

insert  into btb_trace(name,time,act,id,sname) values

(user(),now(),'update',concat(old.id,'->',new.id),concat(old.name,'->',new.name));

insert  into btb_update values(user(),new.id,new.name,now());

end

$$

\d  ;

 

 

登录并测试:mysql   -uma1  -pma1    -h192.168.50.10

use   test;

insert  into   btb values(1,'tom');

insert  into   btb values(2,'jack');

insert  into   btb values(3,'lucy');

update  btb   set  id=10  where   id=1;

delete  from  btb   where  id=3;

select  *   from  btb_trace;

select  *   from  btb_bak;

select  *   from  btb_update;

select  *   from  btb_del;

 


      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1954611,如需转载请自行联系原作者




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
Python怎么操作Mysql数据库
Python怎么操作Mysql数据库
51 0
|
1月前
|
SQL 关系型数据库 MySQL
python如何操作mysql数据库
python如何操作mysql数据库
24 0
|
1月前
|
关系型数据库 MySQL
Mysql基础第二十八天,使用触发器
Mysql基础第二十八天,使用触发器
28 0
Mysql基础第二十八天,使用触发器
|
2月前
|
SQL 存储 算法
mysql常用指令操作
mysql常用指令操作
|
22天前
|
存储 SQL 关系型数据库
【MySQL】4. 表的操作
【MySQL】4. 表的操作
21 0
|
1月前
|
SQL 关系型数据库 MySQL
|
20天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
14天前
|
关系型数据库 MySQL
如何解决cmd命令窗口无法运行mysql命令的问题
如何解决cmd命令窗口无法运行mysql命令的问题
10 0
|
1月前
|
存储 关系型数据库 MySQL
|
1月前
|
关系型数据库 MySQL Linux
MySQL启动与登录命令详解
【2月更文挑战第27天】
50 1
MySQL启动与登录命令详解