首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在触发器中使用INFORMATION_SCHEMA.COLUMNS记录对_all_列的更改?

在触发器中使用INFORMATION_SCHEMA.COLUMNS记录对_all_列的更改?
EN

Stack Overflow用户
提问于 2021-07-03 21:07:21
回答 1查看 80关注 0票数 1

触发器可以用于记录对单个DB列的更改,如https://stackoverflow.com/a/779250/569976中所述,但是这种技术要求为每个列都有一个IF语句。如果您只对一列的更改感兴趣,这并不是什么大问题,但是如果您对所有列的更改感兴趣,那么它就会变得更加笨拙。

通过查询INFORMATION_SCHEMA.COLUMNS表,我可以动态地获取表的所有列名。我的问题是..。我可以用它来动态引用列名吗?就像在触发器中,您会做OLD.columnName <> NEW.columnName,但我不认为您真的可以像这样动态地设置列名。

在PHP中,可以使用变量变量。例如:$obj->$var。但如果MySQL有任何类似之处,那对我来说将是个新闻。

有什么想法吗?还是我要用老式的方法,为这个表中的每一列写一个IF语句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-03 22:24:42

触发器只能直接引用标识符。不能使用变量或表达式来命名标识符。

这将需要带有准备和执行的动态SQL,以便可以在运行时从字符串中解析语句,但不能在触发器内准备新语句,因为触发器已经在当前执行语句的上下文中执行。

最简单的解决方案是编写一个直接引用每一列的触发器,该触发器的IF语句与表中的列一样多(我想知道为什么您的表中有数百个列;这听起来像是设计错误的另一个问题)。

上面的注释提到了一个二进制日志解析器。德贝兹是一个开源的二进制日志解析器的例子.

MySQL也支持审计插件体系结构,但坦率地说,现有的审计插件实现非常笨拙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68239964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档