問題詳情。假設我們有一些InnoDB表,並且這個表包含一些記錄。 我的問題是:如何實現「刪除」操作,記住某種形式的操作日誌記錄?我引用「刪除」是因爲它有一些風格:MySQL從表或更新表列刪除標記爲已刪除?
- 刪除操作應使用
DELETE FROM table_x WHERE...
。這對於外鍵約束很有效。但是,如何跟蹤這一行動呢? (我的意思是某種形式的數據庫記錄操作)。如果刪除的記錄插入到輔助數據庫中,或者同一數據庫中的不同表格會是一個好主意? - 另一個想法是有一個列,比如說
valid
可能的值爲1(對於活動/有效)和0(對於刪除的記錄)。 「刪除」操作將簡單地將此列上的值設置爲0,業務邏輯不再考慮它。記錄將通過保存所有記錄在相同的數據庫上完成。這種方法必須大量使用觸發器來執行其他任務,例如根據外鍵更新另一個表中的記錄。
如果您有這些任務,可以隨意添加其他方法來完成此任務。 另外,如果我們決定變體1)效果最好,是否可以在同一個事務中(從java代碼開始)執行DELETE FROM database1.table
和INSERT into database2.table
? (我真的沒有嘗試過,但我不認爲它會起作用)。我只是不想結束從第一個數據庫中刪除的行並從第二個行中丟失行。如果不可能,但仍然是1)最佳選擇,通過刪除table1中的記錄並將它們插入到同一事務中的table2中,將數據從table1移動到table2是一種很好的做法嗎?
請記住MySQL服務器內置的檢查可以保持數據庫的完整性,並且解決方案在回答我的問題/提出解決方案時也必須解決日誌記錄問題。
我personnaly去與有效/刪除列,將允許你做一些行「待定」,如果稍後需要。 – 2012-02-28 18:52:40
我們在談論什麼樣的數據?如果將數據移入存檔,您的公司將從數據挖掘中獲益嗎? – 2012-02-28 20:55:51