Mysql中触发器防止循环

  1. 触发当前表防止循环
  2. 两表双向触发防止循环

触发当前表防止循环

  • 假设一个表”clientinfo”有一个触发器是修改本表任意字段时,则会触发修改对应行的字段”modifytime”

    1
    2
    3
    begin
    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
    3
    begin
    set NEW.modifytime = NOW();
    end

两表双向触发防止循环

  • 两表”clientinfo1”和”clientinfo2”进行插入、更新、删除的双向同步,这里提供一个暂时禁用触发器的方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    begin
    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

文章标题:Mysql中触发器防止循环

本文作者:Bevis

发布时间:2019-10-12, 10:57:28

最后更新:2019-10-12, 03:42:45

目录
×

喜欢就点赞,疼爱就打赏