如何检查MySQL触发器中每个OLD。*到NEW。*列的差异?

时间:2016-02-25 15:54:12

标签: mysql session mariadb event-triggers

由于SQL没有FOR-EACH语句,我们如何验证OLD对象到NEW对象的每个值是否存在差异{{1}在不知道表列[和表名]的情况下输入AFTER UPDATE

今天的例子:

TRIGGER

我希望它可以是:

CREATE TRIGGER `audit_events_ugly`
AFTER UPDATE ON `accounts`
FOR EACH ROW
BEGIN
       DECLARE changes VARCHAR(8000);
       IF OLD.user_name <> NEW.user_name THEN
            SET changes = 'user_name from % to %';
       END IF;
       IF OLD.user_type <> NEW.user_type THEN
            SET changes = CONCAT(changes, ', user_type from % to %');
       END IF;
       IF OLD.user_email <> NEW.user_email THEN
            SET changes = CONCAT(changes, ', user_email from % to %');
       END IF;
       CALL reg_event(how_canI_get_tableName?, @user_id, changes);
       -- and that can go on and on... differently for every table.
END;

任何想法?什么,前进,阵列......

1 个答案:

答案 0 :(得分:1)

我认为你无法在触发级别的for循环中直接执行此操作。

但是,您可以使用脚本生成触发器代码。每次向表中添加/删除字段时,都需要重新生成它(通常不常用)。