我有一个普通的AFTER UPDATE触发器来检查我的用户表是否已经更改了列,如果是,请调用存储过程。MYSQL触发器递归规避
问题是存储过程做了一些计算并自己更新了用户中的字段。
如果我的存储过程更新了调用触发器的用户表,它将再次调用存储过程,我该如何避免递归?
谢谢!
我有一个普通的AFTER UPDATE触发器来检查我的用户表是否已经更改了列,如果是,请调用存储过程。MYSQL触发器递归规避
问题是存储过程做了一些计算并自己更新了用户中的字段。
如果我的存储过程更新了调用触发器的用户表,它将再次调用存储过程,我该如何避免递归?
谢谢!
MySQL不会让您禁用触发器(不删除和重建它们),但你有两个选择:
对于#3,最好使用会话变量(即'@ var'而不是'@@ var')。你甚至可以使用它,当它检测到发生递归时关闭(即,在触发器和proc中,保护'IF IFNULL(@unique_recurse_var,0)= 0中的潜在递归代码THEN SET @unique_recurse_var = 1; <做保护操作>; ELSE SET @unique_recurse_var = 0; END IF;')。你可能想要单位测试,以确保功能永远不会中断。 – CSTobey
想知道mysql允许它:-S – zerkms