Mysql数据库 12.SQL语言 触发器

一、触发器(操作日志表)

1.介绍

不需要主动调用的一种储存过程,是一个能够完成特定过程,存储在数据库服务器上的SQL片段。

对当前表中数据增删改查的一种记录<日志表>,根据触发器自动执行,记录当前操作

Mysql数据库 12.SQL语言 触发器_第1张图片

2.触发器的使用

2.1 手动进行操作记录

1.创建日志表
代码实现
#创建日志表
create table stulogs(
	id int primary key auto_increment,#主键自增 autu_increment
	time timestamp,#操作类型的时间
	log_text varchar(200)#记录当前所做的具体操作
);
运行结果

Mysql数据库 12.SQL语言 触发器_第2张图片

2.向学生表中添加一条数据
代码实现
#向学生表中添加一条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
values(
	'20220112','小丽','女',20,2
);
运行结果

Mysql数据库 12.SQL语言 触发器_第3张图片

3.手动进行日志的记录 新增记录
代码实现
insert into stulogs(time,log_text) values(now(),'添加20222012学生信息');
运行结果

Mysql数据库 12.SQL语言 触发器_第4张图片

4.对表修改结果
students表

Mysql数据库 12.SQL语言 触发器_第5张图片

日志表stulogs
Mysql数据库 12.SQL语言 触发器_第6张图片

2.2 使用触发器自动进行操作记录

1.创建触发器 trigger
语法:关键字:trigger

create trigger 触发器的名字

                        #定义触发器的触发时机

<新增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,'学生信息'));
	
运行结果

Mysql数据库 12.SQL语言 触发器_第7张图片

2.查看触发器

show triggers;

代码实现
#查看触发器
show triggers;
运行结果

Mysql数据库 12.SQL语言 触发器_第8张图片

3.测试触发器

代码实现
#触发器自动执行
#新增数据操作
insert into students (stu_num,name,stu_gender,stu_age,cid)
	values('20220113','小美','女',21,1);
运行结果

Mysql数据库 12.SQL语言 触发器_第9张图片

对表修改结果

Mysql数据库 12.SQL语言 触发器_第10张图片

触发器日志表自动存储结果

Mysql数据库 12.SQL语言 触发器_第11张图片

4.删除触发器

语法

drop trigger 触发器名;

代码实现
drop trigger stulogs;
运行结果

Mysql数据库 12.SQL语言 触发器_第12张图片

二、NEW与OLD

介绍

new与old关键字用来在触发器中获取出发这个触发器的数据库操纵语言DML的数据

new:在触发器中获取insert操作添加的数据,update操作修改后的记录

old:在触发器中用于获取delete操作删除前的数据,update操作修改前的数据

Mysql数据库 12.SQL语言 触发器_第13张图片

同时新增多条数据

代码实现
#同时新增多条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
	values('20220114','小小','男',18,1),('20220115','郭靖','男',20,2);

运行结果Mysql数据库 12.SQL语言 触发器_第14张图片

对表修改结果

students表

Mysql数据库 12.SQL语言 触发器_第15张图片

log_text日志表

Mysql数据库 12.SQL语言 触发器_第16张图片

修改触发器

Mysql数据库 12.SQL语言 触发器_第17张图片Mysql数据库 12.SQL语言 触发器_第18张图片

新增一个触发器,记录修改操作
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));
Mysql数据库 12.SQL语言 触发器_第19张图片 修改数据

update 表名 set 列名='修改后的数据' where 条件;

代码实现
#修改数据
update students set name='大黄' where stu_num=20220114;
运行结果

Mysql数据库 12.SQL语言 触发器_第20张图片

表数据修改结果 

Mysql数据库 12.SQL语言 触发器_第21张图片

表数据修改

查看触发器
代码实现
#查看触发器
show triggers;
运行结果,显示触发器记录

Mysql数据库 12.SQL语言 触发器_第22张图片

案例 

修改数据并触发器记录

代码实现
#删除数据
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,'】'));
运行结果

Mysql数据库 12.SQL语言 触发器_第23张图片 

表数据修改结果

Mysql数据库 12.SQL语言 触发器_第24张图片Mysql数据库 12.SQL语言 触发器_第25张图片

三、触发器使用总结

Mysql数据库 12.SQL语言 触发器_第26张图片

你可能感兴趣的:(Mysql数据库,数据库)