mysql触发记录,查找更改的列
我正在编写一个触发器来跟踪表中发生的所有更改.不幸的是,这个表有150列,我想避免在代码中编写每一列(例如new.col1,new.col2 ….),因此我在“更新触发器后”编写了一个以下查询
由于更新查询中未更改的数据重复,此想法导致多个问题. 简而言之,我想动态地找出哪些列是更新查询的一部分,如果不可能,有一种方法可以遍历“new”行的所有列,这样我就可以动态地比较旧的.@ colName == new @ COLNAME? 我已经看过了 最后一个链接是关闭我需要的只有一个区别,我不想在下面的语句中硬编码列名,因为我在所有表中有超过100列我将要编写类似的触发器!!
最佳答案
我今天早上对此进行了一些研究,看起来我遇到了与你相同的搜索结果.最终,我认为没有办法遍历所有表列并引用相应的旧/新值.我正在决定明确检查每一列,然后记录:
我找到了另一个解决方案here.理论上你可以有3个分隔列表,一个用于列名,一个用于旧val,一个用于新val.您必须显式引用旧的和新的val,但这将是一行(更容易维护或复制/粘贴以在其他表上实现),然后您可以循环.所以在伪代码中,它看起来像这样:
我没想过太多.您可能需要调用存储过程而不是设置变量.但它可能值得研究.我已经在我的触发器上花了足够的时间.不确定我能否(对我的老板)验证更优雅的解决方案的试错时间. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- php – 如何在Laravel 4中使用BIGINT作为自动递增主键
- mysql – 如何在Hibernate中为每个公司创建一个customerNum
- 从HTML表单获取ID – PHP
- MYSQL数据库MySQL行级锁、表级锁、页级锁详细介绍
- php – 如何在sql中生成随机字符串到salt passowrd?
- Mysql应用mysql获得60天前unix时间思路及代码
- java – 如何检查数据库中的删除是否成功?
- mysql – 将字符串与之前具有空格的字符串进行比较,而不是另
- 如何调试JPA CriteriaBuilder查询
- mysql – 未定义的方法`eq’代表nil:nilClass with rails