mysql触发器不能进行修改操作的总结

1.今天写了一个触发器,却出现如下的错误:Can't update table 'tb_user' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我的触发器是这样的:

    dilemiter //

    drop triggerif exists TR_I//

    createtrigger TR_I

    after updateon tb_user

   for each row

         if new.name=‘xiao ming’

         then

              delete from tb_user where tb_user.id=new.id;

end if;

end


转载自:http://blog.sina.com.cn/s/blog_6810dfc20101j2pj.html

 

2.另写的一个触发器,同样出现上述问题

create trigger TR_U
before update on tb_user 
for each row 
    update tb_user  set new.name ='ni hao' where id=new.id; 

end

 

solution:

     1. 非常遗憾,MYSQL中触发器中不能对本表进行 insert ,update ,delete操作,以免递归循环触发

     2. 对于update 只能用set进行操作,insert与delete只能借助第二张表才能实现需要的目的

     3.网上有人说:借助连接查询语句试试看,实现思路,先将要符合删除条件的记录查询出来,作为一个新的集合(相当于一张中间表),在通过集合与当前表的inner join  语句 进行删除。(还没有具体实践)

   note:在SQLServer 中是可以的。

 

  所以问题2改为

create trigger TR_U
before update on tb_user 
for each row  
    set new.name = 'ni hao'; 
end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值