mysql触发器详解

何为触发器

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

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

添加触发器

语法:

	CREATE TRIGGER trigger_name
	trigger_time
	trigger_event ON tbl_name
	FOR EACH ROW
	begin
	  ……
	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 insert
on invite_user for each row
begin
declare 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;


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李秀才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值