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