2017-01-09 70 views
0

我正在使用Spring Boot + mySql在web項目上工作在真正的mysql系統中處理DELETE的最佳方法

我在考慮如何從數據庫中刪除數據。

我知道DELETE * FROM表聲明,但我有疑問,

  1. 有沒有辦法使用DELETE來保持歷史或操作日誌?
  2. 如果我使用DELETE刪除數據,然後添加一個新數據,新數據將插入到被刪除的位置,所以這個id是錯誤地排序的嗎?

我的朋友建議我爲每個表添加一個BOOL列,這是刪除標誌,爲了控制刪除過程,這是一個不錯的方法嗎?

對不起,我是服務器開發的新手,所以我想確保每一步都是健壯的。先謝謝你。

+0

回答:1)不,不會自動和2)不會重新使用mysql自動增量鍵。 3)它的一種方式,但你的桌子會變得越來越大 – RiggsFolly

+0

關於1.不是默認情況下,你可以創建一個DELETE [觸發器](https://dev.mysql.com/doc/refman/5.5/en/創建-trigger.html)。通過標記記錄來使用「軟刪除」是一種常用技術。 – PeterMmm

回答

1

有什麼辦法可以使用DELETE保存歷史或操作日誌嗎?

您可以通過在日誌文件中追蹤這些操作或在數據庫上放置觸發器來追蹤每個刪除(例如,將創建新表中的新記錄)來執行此操作。我個人更喜歡使用日誌文件,所以你可以配置你的日誌框架的幾種類型(或通過保存在數據庫,或在日誌文件中,或通過使用系統日誌等...)

如果我刪除使用DELETE的數據,然後我添加一個新的,新數據 會插入到被刪除的地方,所以這個id是錯誤排列的 對不對?

否;新的記錄將擁有自己的ID

我的朋友建議我到BOOL列添加到每個表,這是 刪除標誌,以控制刪除過程,它是一個很好的方式 這樣做?

在這種情況下,你並不是一個真正的刪除,而是一個邏輯刪除;該記錄不phisically從數據庫中刪除,但爲刪除其標記。所有其他查詢這會影響(例如,你必須選擇與刪除標誌爲假,因爲與刪除標記的那些真正被「刪除」的所有記錄) 這可以存儲所有的變化有用的,但你必須也考慮表的尺寸。 ..記錄將始終加上從來沒有真正刪除...

個人而言,我會使用日誌文件,並刪除記錄

我希望這個運動可以幫助

安傑洛

0

Q1。有沒有辦法使用DELETE來保持歷史或操作日誌? A1。您正在使用的服務器端所以當刪除你就可以使用你的選擇像Log4j的或SLF4J任何記錄在你的代碼記錄。Q2302。如果我使用DELETE刪除數據,然後添加一個新數據,新數據將插入到被刪除的位置,所以這個ID是錯誤的權利? A2。沒有MySQL不會使用相同的密鑰。

你的朋友建議的是軟刪除,意味着數據在系統中仍然可用。但它每次都會讓你的桌子更大。實際上,您可以在這裏使用多種方法,完全取決於您的需求,例如您需要刪除或不需要的數據。

相關問題