一、触发器(操作日志表)
1.介绍
不需要主动调用的一种储存过程,是一个能够完成特定过程,存储在数据库服务器上的SQL片段。
对当前表中数据增删改查的一种记录<日志表>,根据触发器自动执行,记录当前操作
2.触发器的使用
2.1 手动进行操作记录
1.创建日志表
代码实现
#创建日志表
create table stulogs(
id int primary key auto_increment,#主键自增 autu_increment
time timestamp,#操作类型的时间
log_text varchar(200)#记录当前所做的具体操作
);
运行结果
2.向学生表中添加一条数据
代码实现
#向学生表中添加一条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
values(
'20220112','小丽','女',20,2
);
运行结果
3.手动进行日志的记录 新增记录
代码实现
insert into stulogs(time,log_text) values(now(),'添加20222012学生信息');
运行结果
4.对表修改结果
students表
日志表stulogs
2.2 使用触发器自动进行操作记录
1.创建触发器 trigger
语法:关键字:trigger
create trigger 触发器的名字
<before|after> #定义触发器的触发时机
<新增insert|删除delete|修改update> #定义数据操作语言DML类型
on <表名> #指定具体是哪张表
for each row #声明为行级触发器(只要操作一条记录就能触发触发器执行一次)
具体的触发器操作
案例
通过触发器的方式来进行日志记录
代码实现
#通过触发器的方式来进行日志记录
create trigger tri_test1
after insert on students
for each row #行级触发器
insert into stulogs(time,log_text)
values(now(),concat('添加',new.stu_num,'学生信息'));
运行结果
2.查看触发器
show triggers;
代码实现
#查看触发器
show triggers;
运行结果
3.测试触发器
代码实现
#触发器自动执行
#新增数据操作
insert into students (stu_num,name,stu_gender,stu_age,cid)
values('20220113','小美','女',21,1);
运行结果
对表修改结果
触发器日志表自动存储结果
4.删除触发器
语法
drop trigger 触发器名;
代码实现
drop trigger stulogs;
运行结果
二、NEW与OLD
介绍
new与old关键字用来在触发器中获取出发这个触发器的数据库操纵语言DML的数据
new:在触发器中获取insert操作添加的数据,update操作修改后的记录
old:在触发器中用于获取delete操作删除前的数据,update操作修改前的数据
同时新增多条数据
代码实现
#同时新增多条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
values('20220114','小小','男',18,1),('20220115','郭靖','男',20,2);
运行结果![](https://i-blog.csdnimg.cn/blog_migrate/0998b45e519eba7292380756824ef80b.png)
对表修改结果
students表
log_text日志表
修改触发器
新增一个触发器,记录修改操作
create trigger tir_test3
after update on students
for each row
insert into stulogs(time,log_text) values(now(),concat('修改学生信息为',new.stu_num,new.name));
修改数据
update 表名 set 列名='修改后的数据' where 条件;
代码实现
#修改数据
update students set name='大黄' where stu_num=20220114;
运行结果
表数据修改结果
表数据修改
查看触发器
代码实现
#查看触发器
show triggers;
运行结果,显示触发器记录
案例
修改数据并触发器记录
代码实现
#删除数据
delete from students where name='大黄';
#修改数据
update students set name='蓝' where stu_num=20220115;
#添加删除触发器
create trigger tir_test4
after update on students
for each row
insert into stulogs(time,log_text) values(now(),concat('将学员姓名从【',old.name,'】修改为【',new.name,'】'));