1. 程式人生 > 資料庫 >Mysql學習總結(82)——MySQL邏輯刪除與資料庫唯一性約束如何解決?

Mysql學習總結(82)——MySQL邏輯刪除與資料庫唯一性約束如何解決?

一、問題場景

在業務中有個唯一約束A,當該業務進行邏輯刪除後(設定標記為刪除狀態),再往唯一約束列插入相同的值時,此時會報Duplicate entry,但在業務上,該值是必須要插入的。

二、解決思路

方案一:不採用邏輯刪除,直接物理刪除

方案二:  新建歷史表

主表進行物理刪除,同時將刪除的記錄儲存到歷史表中

方案三:取消表的唯一約束,同時引入redis來保證唯一約束

取消表的唯一約束,在專案中引入redis,通過redis來判重,新增時往redis set記錄,刪除時,刪除redis記錄

方案四:變更刪除標記為時間戳

將刪除狀態不以0,1表示,而是以時間戳為值,然後將刪除狀態為與之前的唯一約束A重新組成唯一聯合約束index(A、del_flag),刪除時變更del_flag的時間戳

方案五:保留刪除標記,同時新建一個欄位del_unique_key

保留刪除狀態位,再新增一個欄位del_unique_key,該欄位預設值為0,欄位型別和大小與主鍵id保持一致,同時與原先的唯一約束重新組成聯合唯一約束index(A,del_unique_key),業務進行邏輯刪除,變更del_unique_key的值為該刪除行的主鍵id</