数据库触发器
介绍
什么是触发器
存储过程是对特定的SQL语句进行封装,完成数据库中复杂的数据处理逻辑,用于提供程序复用性。
触发器是一种特殊的存储过程,可以对表实施复杂的完整性约束,保持数据的一致性。
为什么能保持数据一致性?
当触发器所关联的数据改变时,触发器会自动被激活,并触发定义的相关操作,以此保持关联数据的完整性。
激活触发器的操作有:insert、update、delecte。
触发器与存储过程的区别
存储过程需要使用“ CALL 存储过程名(参数列表)”进行调用使用,触发器不需要显式调用。
定义了触发器,MYSQL会提供两张逻辑表:new用于存放更新后的记录;old用于存放更新前的记录。
两张表的表结构与触发器所在表结构相同,当触发器执行后,这两张表会自动删除。
创建触发器
语法:
create trigger 触发器名称 触发时间 触发事件 on 表名 for each row 程序体
语法解析
触发器名称:创建的触发器的名称。
触发时间:☞触发器执行时间可以用before或after,说明在触发器是在激活他的语句之前或之后触发。
触发事件:激活触发程序的语句类型,如:insert、update、delecte。
表名:触发事件操作的表名称。
for each row :表示任意一条记录上的操作满足触发事件都会触发该触发器。
程序体:触发器被触发后执行的语句集。
例题:
create trigger triaddnum //定义创建触发器的名称 after insert //数据插入完成后执行 on orders //触发器创建在orders表 for each row set @total=@total +new.inum;//累加新增记录的购买记录
触发器不能显示调用,当触发事件发生时,触发器会自动执行。
//可以通过查看变量查看触发器执行结果。 set @total=0;//定义变量初始值 insert into orders(uid,gid,inum) valuse(1,4,2),(1,1,3),(1,3,4);//添加数据 select @total;//查看变量@total的值
触发器可以对数据进行验证(存储过程可以嵌套在触发器和事件中)
delimiter// create trigger tricheck before insert on users for each row begin if length(new.upwd)>=6 then set new.upwd=md5(new.upwd); else //自定义错误提示数据插入失败 signal sqlstate'45000' set message_text='密码长度小于6,请重新输入'; end if; end//
查看触发器是否执行可通过添加数据进行触发。
触发器的使用
查看触发器
show triggers [{from | in} 数据库名] [like 匹配模式 | where 条件表达式]
删除触发器
drop trigger [if exists] 触发器名称;