Mysql中触发器防止循环
触发当前表防止循环
假设一个表”clientinfo”有一个触发器是修改本表任意字段时,则会触发修改对应行的字段”modifytime”
1
2
3begin
update clientinfo set NEW.modifytime = NOW() where id=NEW.id;
end由于Mysql有保护循环的情况,会报Can’t update table ‘tbl’ in stored function/trigger because it is already used by statement which invoked this的错误,所以导致无法触发并且回滚,所以不能使用Update而要使用set,如下
1
2
3begin
set NEW.modifytime = NOW();
end
两表双向触发防止循环
- 两表”clientinfo1”和”clientinfo2”进行插入、更新、删除的双向同步,这里提供一个暂时禁用触发器的方法
1
2
3
4
5
6
7
8
9begin
if @disable_trigger is null then
set @disable_trigger = 1;
-- 放入相应的触发语句,例如插入语句
insert into clientinfo2(id,clientname,cteattime,modifytime)
values(new.id,new.clientname,new.cteattime,new.modifytime);
set @disable_trigger = null;
end if;
end
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 936524003@qq.com