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

你可能感兴趣的:(mysql)