2012-07-25 49 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