在我的數據庫中,我想跟蹤每次更改的列的值。以某種方式,每當某個字段的值發生更改時,我們都可以知道以前的值是多少。爲每個更改分配時間戳。我使用MySQL作爲數據庫服務器。在MySQL中更改數據捕獲
回答
要做到這一點,你需要創建一個觸發器,這是當發生在一個給定表的INSERT, UPDATE, DELETE
被觸發的事件。
查看CREATE TRIGGER的文檔。
對於您想要做的事情,您可能需要在主表上爲每個INSERT/UPDATE
插入一行輔助表,AFTER
它恰好包含已更改行的ID,舊值爲新值和時間戳。
這是我會建議的。這可能是一小部分工作,但如果你這樣做,我真的認爲你將有一個堅實的方式在MySQL中進行變更數據捕獲。請記住,在考慮鎖定和隔離級別等問題時,在數據庫中執行更改跟蹤實際上是一件很難做到的事情。我強烈建議使用這樣的過程。
查看來自iAnywhere的名爲MobiLink的產品。您可以從here下載它的免費開發者版本。 MobiLink的目的是允許您將數據更改從MySQL等數據庫同步到SQL Anywhere數據庫。當然,您唯一感興趣的部分是能夠從MySQL獲取更改。幸運的是,MobiLink將在MySQL數據庫中非常有效地創建這些更改數據捕獲觸發器。實際上,它甚至會爲您提供用於執行此操作的sql腳本,以防您需要再次執行此操作。之後,您可以卸載SQL Anywhere。
要開始,在安裝它之後,將會有一個名爲Sybase Central的產品,您需要打開它。打開這個對話框時,會出現一個嚮導,它將引導您完成針對MySQL數據庫的MobiLink配置。我認爲如果遇到困難,安裝的幫助文件中會有一篇演練,但我現在無法訪問它進行驗證。
通過嚮導運行後,它將配置您的MySQL數據庫以更改數據捕獲。如果你看看你的數據庫,你也會得到所有你需要的觸發器和更改跟蹤列。
希望幫助....
觸發器並不總是以記錄在數據庫中更改事件的最好辦法。因爲一旦表的模式發生變化,觸發器就會失效,並且會導致實際的表操作失敗。
對於mysql,您需要從二進制日誌文件捕獲更改事件。 Mysql提供API來讀取二進制日誌(後5.6版)。
您可能還需要尋找到Flexviews,它提供了Oracle像物化視圖日誌來記錄變更事件。
我創建了一個名爲cdc_audit工具,任何或所有自動錶在MySQL審計表的創作,甚至保留了預先存在的觸發器。我在考慮更改數據捕獲(針對數據倉庫ETL應用程序)時編寫了它。也許你或別人會覺得它有用。我也blogged about it。
特點
- 自動審覈表代
- 自動生成的觸發器來填充審計表
- 在審計表自動的新行同步到.csv文件。
- 讀取mysql information_schema自動確定表和列。
- 可以爲所有數據庫表或指定列表生成表格+觸發器。
- 可以同步所有數據庫表或指定列表的審計表。
- 當生成AFTER觸發器時,保留預先存在的觸發器邏輯(如果有)。
- 同步腳本選項可刪除除最後一個審計行以外的所有行,以使源數據庫保持較小。
- 1. MYSQL更改數據捕獲(CDC) - Azure服務(Azure數據工廠)
- 2. 更改數據捕獲 - 用於捕獲數據更改的Microsoft最佳實踐?
- 3. 更改oracle 11g中的數據捕獲
- 4. 更改數據捕獲錯誤
- 5. 更改幾個表的數據捕獲
- 6. 在datagridview中更改之前捕獲數據?
- 7. 在som中更改mysql中的數據
- 8. 更改數據捕獲 - 歷史數據的初始加載
- 9. 數據倉庫 - 非易失性與更改數據捕獲
- 10. 在MVVMCross中捕獲EditText更改
- 11. 如何在AS 400和iSeries上更改DB2的數據捕獲
- 12. 捕獲可編輯數據網格中更改的單元格
- 13. 實時更改Talend中的數據捕獲
- 14. SQL更改數據捕獲獲取所有表
- 15. 從更改數據捕獲數據生成插入,更新和刪除語句
- 16. 收聽MySQL中的數據庫更改
- 17. 一次更改多個mysql數據庫(SAAS數據庫更改)
- 18. 任何使用更改數據捕獲進行復制的人?
- 19. SQL Server 2008 - 審計更改數據捕獲
- 20. 用於更改數據捕獲的主瀏覽器
- 21. 開放源代碼OSGI更改數據捕獲工具
- 22. 在c中捕獲網絡數據包
- 23. 在informatica中捕獲數據錯誤
- 24. 在Kohana中捕獲數據庫異常
- 25. 在控制器中捕獲數據
- 26. 在數據庫表更改值獲取
- 27. 在GQL中更改數據
- 28. 在Excel中更改數據
- 29. SQL Server 2008更改數據捕獲與審計跟蹤中的觸發器
- 30. SAPUI5數據綁定獲取更改事件中更改的值