唯一索引和邏輯刪除衝突

2021-10-24 19:40:16 字數 445 閱讀 8321

在資料表結構設計的時候有同時存在唯一索引和邏輯刪除,通常邏輯刪除is_deleted是取值範圍01,當刪除同乙個唯一索引欄位值時,就會失敗。

不再設定邏輯刪除標誌位,直接物理刪除,這依賴業務資料的特性。

每個表新建乙個歷史表,儲存已經刪除的歷史資料,缺點是大量的歷史表。當然還可以參考mysql schema的table表來設計,儲存schema和tablename,然後行資料json型別儲存,需要根據場景選擇。

刪除標誌位不使用01,使用刪除時間戳來替代,同一秒時間,相同唯一字段可能性基本為零,使用初始值0或者null來作為未刪除標誌符,會占用一定的儲存空間,但可以顯示刪除時間。

刪除字段刪除標識設為null,未刪除設定為0。

Mysql邏輯刪除保留唯一索引

通常的業務系統中為了防止認為操作失誤,造成誤刪資料,都要求對於刪除操作只執行邏輯刪除,即假刪除。常見的做法新增刪除標識字段,使用者操作刪除時更新刪除標識欄位來達到目的。但是當遇到表中需要有唯一性索引時則會造成問題。建立乙個商品編碼為a110的商品,商品編碼為該錶的唯一性索引,此時對該商品進行刪除後,...

如何解決邏輯刪除與資料庫唯一約束衝突

不知道大家有沒有遇到這麼一種業務場景,在業務中有個唯一約束a,當該業務進行邏輯刪除後 設定標記為刪除狀態 再往唯一約束列插入相同的值時,此時會報duplicate entry,但在業務上,該值時必須要插入的。今天我們就來聊聊處理這種業務場景的幾種思路 主表進行物理刪除,同時將刪除的記錄儲存到歷史表中...

主鍵和唯一索引

主鍵和唯一索引 主鍵 主關鍵字 primary key 是表中的乙個或多個字段,它的值用於唯一地標識表中的某一條記錄。唯一索引 一種索引,不允許具有索引值相同的行,從而禁止重複的索引或鍵值。系統在建立該索引時檢查是否有重複的鍵值,並在每次使用 insert 或 update 語句新增資料時進行檢查。...