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
是的,可以在触发器中添加游标以循环浏览列。这里有几个链接:
https://dba.stackexchange.com/questions/22925/mysql-loop-over-cursor-results-ends-ahead-of-schedule
根据经验,创建一个执行循环、插入并从触发器调用它的存储过程可能会更容易