一:介绍:
1.触发器实际上就是一种特殊的存储过程,两者都能够在MYSQL当中完成特定的功能,存储在服务器上的特殊SQL片段,可以重复进行使用,提高复用性的一种功能.但是触发器并不需要进行调用,在使用DML操作的时候会自动的调用相关的触发器操作
2.触发器能够对于DML操作当中的,删除(delete),更新(update),插入(insert) 除此之外触发器并不会作出反应
3.触发器的使用会让表跟表之间建立起来一定的关联,对一个表使用DML操作也可能会使另外的一个表触发提前设定的操作
二:语法:
基础语法: 一:仅仅只有一个执行语句的触发器 create trigger (tri_name) after/before DML操作(D,I,U) on (进行操作的表) for each row 执行语句(包含触发之后要关联的表); 二:有多个语句需要进行执行时,就要跟存储过程联合起来进行使用 create trigger (tri_name) after/before DML操作(D,I,U) on (进行操作的表) for each row begin 执行语句 end ...; -- 通过使用触发器,让两个表之间建立一定的联系 -- 要求:当user添加数据时,添加用户的id,账号,密码之后,在user_log登记注册的时间,以及情况 -- 一:仅仅只有一个执行语句的语法 create TRIGGER tri_0 after insert on user for each row insert into user_log VALUES(NULL,now(),'新用户添加'); insert into user VALUES(null,'张三',123456); TRUNCATE user; -- 要求二:当user用户修改的时候,自动增加日志,并记录时间,情况 create trigger tri_1 after update on user for each row insert into user_log VALUES(null,now(),'用户修改了数据'); update user set password=456123 where name='张三';
三:NEW OLD的使用*
1.介绍:
MYSQL当中也定义了NEW OLD,从而用来表示触发器所在表的一些数据,从而让数据显示的更加清晰,满足需求,记录的更加详细
2.分类
在DML操作当中,不同的new 或者 old有不同的含义
1>对于insert 操作,仅仅只有new操作,表示自己将要或者时已经新增的数据
2>对于update操作,两种方式都有,OLD代表的是修改之前的数据,NEW代表的是将要或者是已经修改的数据
3>对于delete操作,仅仅只有OLD操作,表示将要删除或者是已经删除的数据
-- 要求一:通过使用触发器,修改用户密码的时候,也要在日志当中记录修改之前以及之后的密码,以及修改时间 drop TRIGGER tri_2; insert类型触发器 create TRIGGER tri_0 after insert on user for each row insert into user_log VALUES(NULL,now(),CONCAT('有新用户添加,用户名称为:',new.username)); insert into user VALUES(null,'张三',123456); update类型触发器 create trigger tri_2 before update on user for each row insert into user_log VALUES(null,now(),concat_ws('-',old.username,'修改了密码,修改前为',old.password,'修改后为:',new.password)); update user set password = '15090436290' where username='张三'; delete类型触发器 create trigger tri_3 after delete on user for each row insert into user_log VALUES(null,now(),concat('删除的用户名称是',old.username)); delete from user where username='张三';
四:注意事项
1.在使用触发器之前,需要想好操作类型是DML当中的哪一种(D,I,U),以及什么时候会触发(B,A),以及更重要的,是单行数据操作,还是多行的数据操作,从而选择不同的操作方式.
2.实际上,触发器的执行效率非常的低下,插入数据的效率远远比通过使用触发器进行出发所用的时间要短,所以最好还是使用插入的方法,并不推荐使用触发器
3.触发器是一行一行进行的,所以对于增删改十分频繁的表,一定一定一定一定不要使用 触发器!!!! 十分浪费资源
感谢观看!