如果在数据库表中更改了记录,我希望保留所有更改的记录。为此,我想输入表名、列名、旧值和新值.在日志表中,当通过触发器更改MYSQL表时。我的日志表看起来

发布于 2022-09-06 18:19:08
必须为特定表定义触发器,因此您已经知道要使用哪个表。然后,可以在编写触发器时将其指定为字符串文本。
CREATE TRIGGER t AFTER UPDATE ON MyTable
FOR EACH ROW BEGIN
IF NEW.column1 <=> OLD.column1 THEN
INSERT INTO Log
SET table_name='MyTable', -- string literal
field_name='column1', -- string literal
old_val=OLD.column1,
new_val=NEW.coumn1,
action='UPDATE'; -- string literal
END IF;
IF NEW.column2 <=> OLD.column2 THEN
INSERT INTO Log
SET table_name='MyTable', -- string literal
field_name='column2', -- string literal
old_val=OLD.column2,
new_val=NEW.coumn2,
action='UPDATE' -- string literal;
END IF;
END您必须继续并为每个列添加另一个IF块。
如果更改表中的列,则必须重写触发器。
您可能会问,是否可以为循环中的每一列设置一个自动执行此操作的触发器。不你不能那样做。它需要准备/执行,但不能在触发器中使用动态SQL。
如果这似乎是很多工作,那么您可能需要考虑使用审计插件。您可以自己编写,也可以使用MySQL的开源审计插件之一,或者如果您是MySQL企业的客户,则提供面向付费客户的审计插件。
https://stackoverflow.com/questions/73626037
复制相似问题