2011-10-11 101 views
0

我將每個更新或插入插入到日誌表中。我正在使用觸發器來執行此操作。MySQL觸發器獲取列名稱

我的問題是,有沒有辦法知道哪列更新或插入的信息,以及如何檢索列名**不是值?

例如:

聯繫信息改變了用戶的電話,所以我希望把日誌的列的名稱,而不是價值變化。

用戶|名稱|電話

回答

1

沒有(簡單/內置)方法來獲取已更新的列名稱。你將不得不爲每一列寫一張支票。你可以使用prepare sql和information_schema表來解決問題,但是爲每一列寫入檢查將會更乾淨更快。

FOR EACH ROW BEGIN 

SET @Cols = 'Updated Columns: '; 

IF OLD.col1 <> NEW.col1 THEN 
@Cols = CONCAT(@Cols, 'col1, '); 
END IF; 

IF OLD.col2 <> NEW.col2 THEN 
@Cols = CONCAT(@Cols, 'col2, '); 
END IF; 

..... 

END 
+0

謝謝。順便說一句,@是什麼意思? – Skynight

+0

沒什麼特別的,我總是用@作爲變量的前綴,所以我不會在列名和本地觸發器/過程變量之間混淆。 –