我正在研究一个相当简单的票务管理系统。我想为添加、删除和更改的内容保留日志。我创建了三个触发器,AFTER INSERT、AFTER DELETE和AFTER UPDATE。INSERT/DELETE触发器很简单,它是我遇到问题的UPDATE触发器。我想添加表中哪些列已更改为旧值和新值,即colname changed from X to Y我现在拥有的触发器“工作”,当然,它没有插入我想要的实际值。如何使用OLD变量从NEW和col_name获取值?我也不确定这是不是最好的办法。。。所以如果有人对此有想法,他们也很欢迎。。。这个触发器开始要简单得多。。。BEGIN DECLARE num_rows, i int default 1; DECLARE col_name CHAR(255); DECLARE updated TEXT; DECLARE col_names CURSOR FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'storing' ORDER BY ordinal_position; OPEN col_names; SELECT FOUND_ROWS() INTO num_rows; SET i = 1; SET @updated = 'Updated columns: '; the_loop: LOOP IF i > num_rows THEN LEAVE the_loop; END IF; FETCH col_names INTO col_name; /* So, how do I get the proper values? */ /* IF NEW.@col_name != OLD.@col_name THEN */ /*SET @updated = CONCAT(@updated, OLD.@col_name, ' changed into ', NEW.@col_name, ' ');*/ SET @updated = CONCAT(@updated, 'OLD', ' changed into ', 'NEW', ' '); /* END IF;*/ SET i = i + 1; END LOOP the_loop; CLOSE col_names; INSERT INTO `log` (`storing`, `medewerker`, `actie`, `data`) VALUES (NEW.`id`, NEW.`medewerker`, "Storing aangepast", @updated);END 最佳答案 由于这里不可能使用准备好的语句,我建议您调用一些INSERT语句,例如-如果NEW.column1OLD.column1,则插入到。。。结束IF;如果NEW.column2OLD.column2,则插入到。。。结束IF;...或者尝试将所需的所有字段复制到另一个表中。在这些情况下,您将避免使用游标。关于mysql - MySQL UPDATE触发器:插入实际更改的列的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6927508/
10-11 03:17