不需要主动调用的一种储存过程,是一个能够完成特定过程,存储在数据库服务器上的SQL片段。
对当前表中数据增删改查的一种记录<日志表>,根据触发器自动执行,记录当前操作
#创建日志表
create table stulogs(
id int primary key auto_increment,#主键自增 autu_increment
time timestamp,#操作类型的时间
log_text varchar(200)#记录当前所做的具体操作
);
#向学生表中添加一条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
values(
'20220112','小丽','女',20,2
);
insert into stulogs(time,log_text) values(now(),'添加20222012学生信息');
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,'学生信息'));
show triggers;
#查看触发器
show triggers;
#触发器自动执行
#新增数据操作
insert into students (stu_num,name,stu_gender,stu_age,cid)
values('20220113','小美','女',21,1);
drop trigger 触发器名;
drop trigger stulogs;
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);
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,'】'));