gpt4 book ai didi

需要简化比较所有旧的和新的更改的 MySQL 触发器

转载 作者:行者123 更新时间:2023-11-29 01:04:36 24 4
gpt4 key购买 nike

我希望我的“审核”触发器更易于维护。实际上,在一个 Before update trigger 上,逻辑如下:

IF NEW.field <> OLD.field THEN INSERT INTO table SET field=OLD.field

我正在检查每一列的变化,因为我不想存储没有真正更新的行。有很多受监视的列,当我更改表(添加或删除列)时,我必须编辑触发器以反射(reflect)新的表结构。

有没有一种像这样遍历每一列的简单方法:

FOR EACH COL BEGIN IF NEW.COL <> OLD.COL THEN SET changedetected=true; END IF; END

然后,使用 FOR 循环以相同的方式使用表的所有列填充审计表?

不知道我说的是否清楚,如有需要请发表评论。

非常感谢您的帮助!

最佳答案

您可以从中获取列的列表

SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
ORDER BY ordinal_position;

然后您可以将查询包装到 CURSOR 中并循环遍历名称。

为了比较本身,我想你可以 PREPARE对它的声明

SET @s = CONCAT('SELECT OLD.', col_name, ' = NEW.', col_name, ' INTO @cmp');
PREPARE stmt FROM @s;
EXECUTE stmt;
IF @cmp ...

关于需要简化比较所有旧的和新的更改的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com