循环遍历mysql触发器中的列

Bim*_*del 9 mysql triggers loops calculated-columns

是否可以在触发器内循环遍历所有列名称?

场景:记录已修改的表的所有列.如果某些值没有改变,请不要记录那些值.

DROP TRIGGER IF EXISTS t_before_update_test;
DELIMITER $$
CREATE TRIGGER t_before_update_test
BEFORE UPDATE ON test
FOR EACH ROW
BEGIN
    -- Loop here for all columns, not just col1
    IF OLD.col1 <> NEW.col1 THEN
        INSERT INTO change_logs(
            log_on, user_id,
            table_name, colum_name,
            old_data, new_data
        ) VALUES (
            UNIX_TIMESTAMP(NOW()), '0',
            'test', 'col1',
            OLD.col1, NEW.col1
        );
    END IF;
    -- process looping all columns
    -- col1, col2, ... should be dynamic per loop
END $$
Run Code Online (Sandbox Code Playgroud)

这是工作副本示例,我现在需要遍历OLD或NEW中可用的所有列.

小智 -2

是的,可以在触发器中添加游标以循环浏览列。这里有几个链接:

mysql,遍历列名

https://dba.stackexchange.com/questions/22925/mysql-loop-over-cursor-results-ends-ahead-of-schedule

根据经验,创建一个执行循环、插入并从触发器调用它的存储过程可能会更容易

  • 还不清楚如何在触发器内的这些链接中使用该解决方案(您需要访问旧的和新的 (3认同)
  • Stack Overflow 上不赞成仅提供链接的答案。最好在这篇文章中包含相关要点,以防链接失效。 (2认同)