mysql触发器详解

来源:互联网 发布:sql查询分析器在哪2005 编辑:程序博客网 时间:2024/06/18 11:59

何为触发器

数据库的表中的事件(insert、update、delete)激活的对象称为触发器,使得数据库可以在事件之前、之后去做一些事情。因为使用触发器可以减少客户端和服务器直接的通信,所以触发器可以简化应用逻辑,还可以提高性能。另外,还可用用于自动更新反范式数据或者汇总表数据。在InnoDB表上的触发器是在同一个事务中完成的,所以它们执行的操作是源自的。原操作和触发器操作会同时失败或者成功。

实例:每个用户都有一个邀请码(用户表ycd_sys_user中的inviteCode),然后每邀请一个人注册(邀请记录表invite_user),TA的邀请人数+1(ycd_sys_user表中的inviteCount)

添加触发器

语法:

CREATE TRIGGER trigger_nametrigger_timetrigger_event ON tbl_nameFOR EACH ROWbegin  ……end

参数详解:

trigger_name为触发器的名字

trigger_time为触发器的执行时机(AFTER或者BEFORE)。before就是在sql执行之前,先执行触发器;after相反。

trigger_event触发器的触发事件(常见的有3种:insert、uodate、delete)

tbl_name则是触发器要加在哪张表中

begin end之间写程序体,如果仅有1条语句,则可以不用begin end,直接将语句写在后面。

-- 将分隔符修改为$ 因为mysql默认的分隔符是;在begin和end之间的 多条sql语句里,mysql遇到分号,便先执行分号之前的sql语句,-- 然而,只有begin,没有end,所以这段语句执行就出错了。因词,修改mysql的分隔符,让mysql遇到;的时候,继续往下执行。只有遇到-- 我们设置的分隔符$的时候,才认为此段结束。DELIMITER $create trigger tri_updateInviteCount after inserton invite_user for each rowbegindeclare c int;set c = (select inviteCount from ycd_sys_user where inviteCode=new.inviteCode limit 1);update ycd_sys_user set inviteCount = c + 1 where inviteCode = new.inviteCode;end$-- 将分隔符修改为mysql默认的;DELIMITER ;

查看触发器:

语法:SHOW TRIGGERS FROM [库名]

将查出来整个库下面的所有触发器

show triggers from ycd_test
删除触发器:

语法:DROP TRIGGER [库名].[触发器名称]

DROP TRIGGER ycd_test.tri_updateInviteCount;


原创粉丝点击