2012-07-25 62 views
4

我想创建一个触发器将整个行复制到任何更新上的审计表。MYSQL触发器更新整个行复制

我有2个表

FrequenciesFrequencies_Audit

这是我的触发器。

create trigger auditlog 
before update on frequencies 
for each row insert into 
frequencies_audit select frequencies.*; 

当我更新记录时,我得到未知表frequencies

如果可能的话,我不想单独输入每个字段名称,因为我们不断地在数据库中添加列。

回答

13

而不是BEFORE UPDATE,你可以写AFTER UPDATE触发如下::

DELIMITER // 
CREATE TRIGGER auditlog AFTER UPDATE ON frequencies 
FOR EACH ROW BEGIN 
    INSERT INTO frequencies_audit select * from frequencies where freqId = NEW.freqId; 
END;// 
DELIMITER ; 

freqId仅仅是一个ID列的名称。将它替换为频率表中Id列的名称。

+0

非常感谢:) – JeffD 2012-07-25 13:48:55

+0

请注意,如果您在触发器上使用BEGIN ... END语法,您必须重写分隔符 – Clay 2017-03-11 09:04:34

0

你可以试试这个

create trigger auditlog 
AFTER UPDATE on frequencies 
for each row insert into 
frequencies_audit select * from frequencies; 

因为在MYSQL如果你写select TableName.*那么它总是返回一个错误Unknown table TableName

可能会帮助你。

+0

我在'字段列表'中获得未知列'频率' – JeffD 2012-07-25 04:17:57

+0

不,如果两个表结构都是相同的,请检查表结构。 – 2012-07-25 04:19:57

+0

表结构是相同的。我做了一份没有记录的表格副本。 – JeffD 2012-07-25 04:26:39