簡體   English   中英

MySQL從表中刪除還是在更新表列中將其標記為已刪除?

[英]MySQL delete from table or update table column to mark it as deleted?

問題詳細信息。 假設我們有一些InnoDB表,並且該表包含一些記錄。 我的問題是:考慮到某種形式的操作日志記錄,您將如何實現“刪除”操作? 我引用“刪除”是因為它有一些味道:

  1. 刪除操作應使用DELETE FROM table_x WHERE... 這對於外鍵約束非常有效。 但是,如何跟蹤這一操作呢? (我的意思是某種形式的數據庫記錄操作)。 如果將刪除的記錄插入輔助數據庫或同一數據庫的其他表中,將是一個好主意嗎?
  2. 另一個想法是有一列,讓我們說valid的可能值1(主動/有效)和0(已刪除的記錄)。 “刪除”操作將簡單地將此列上的值設置為0,並且業務邏輯不再考慮它。 通過保留所有記錄,將在同一個數據庫上進行日志記錄。 這種方法將不得不大量使用觸發器來執行其他任務,例如根據外鍵更新其他表中的記錄。

如果有的話,可以隨時添加其他方法來完成此任務。 另外,如果我們確定變體1)效果最佳,那么是否可以在同一事務中(從Java代碼開始)同時執行DELETE FROM database1.tableINSERT into database2.table (老實說,我沒有嘗試過,但是我認為它不會起作用)。 我只是不想在第一個數據庫中刪除行而在第二個數據庫中刪除行。 如果不可能,但仍然是1)最佳選擇,通過刪除表1中的記錄並將它們插入同一事務中的表2中來將其從表1中移動到表2中是一個好習慣嗎?

請記住,MySQL服務器內置的檢查可以保持數據庫的完整性,並且在回答我的問題/提出解決方案時,解決方案還必須解決日志記錄問題。

我更喜歡第一種方法,它可以幫助您提高參考完整性,並且...,您可以使用基表上的觸發器來處理它,因此所有操作都在同一事務中發生

通常,我認為徹底消除記錄絕不是一個好主意。

最好將標記標記為無效的“邏輯”消除法。 實際上,在“現實世界”中,大型數據庫和重要數據庫的記錄永遠不會被徹底刪除。 我更喜歡第二種方法,因為您可以跟蹤所有數據庫操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM