0
我將每個更新或插入插入到日誌表中。我正在使用觸發器來執行此操作。MySQL觸發器獲取列名稱
我的問題是,有沒有辦法知道哪列更新或插入的信息,以及如何檢索列名**不是值?
例如:
聯繫信息改變了用戶的電話,所以我希望把日誌的列的名稱,而不是價值變化。
用戶|名稱|電話
我將每個更新或插入插入到日誌表中。我正在使用觸發器來執行此操作。MySQL觸發器獲取列名稱
我的問題是,有沒有辦法知道哪列更新或插入的信息,以及如何檢索列名**不是值?
例如:
聯繫信息改變了用戶的電話,所以我希望把日誌的列的名稱,而不是價值變化。
用戶|名稱|電話
沒有(簡單/內置)方法來獲取已更新的列名稱。你將不得不爲每一列寫一張支票。你可以使用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
謝謝。順便說一句,@是什麼意思? – Skynight
沒什麼特別的,我總是用@作爲變量的前綴,所以我不會在列名和本地觸發器/過程變量之間混淆。 –