有条件地触发触发器(MySQL / PHP)

时间:2009-04-10 18:10:52

标签: php mysql triggers

我希望只有在用户启动UPDATE时触发触发器(不是我从MySQL命令行运行更新)。

实现这一目标的“行业标准”是什么?我一直在尝试检测传入查询的变量(即@ user_update = true),但没有成功。我的一位同事提出了一种方法,就是在包含触发器的表中添加一个新列:'fire_trigger'。在从代码运行SQL时填充“true”,并确保它存在以触发触发器。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

在执行命令行更新之前禁用触发器,并在之后重新启用它。

但从概念上讲,你做错了。

使用命令行时,为什么不应该运行触发器?我假设这是某种审计触发器,它捕获谁更新了一行。你在命令行上也是“谁”。

OP的评论:

  

是的 - 好点! :)这是一个“dd / mm / yyyy hh:mm - 用户A将名字从”Jane“更改为”Joan“”类型的东西。我只是不希望它在测试阶段填写历史表,因为我可能会手动更新行。

然后禁用触发器,或者只删除添加的历史记录行。更好的是,在单独的数据库上进行测试,根本不用担心。

答案 1 :(得分:0)

创建2个mysql用户:应用程序使用的用户(因此它将识别您的用户)以及通过mysql客户端连接时将使用的用户。

在更新触发器中,检查具有CURRENT_USER()的用户,并仅在应用程序用户时执行操作。

希望它有所帮助!