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

2021-10-10 17:02:39 字數 539 閱讀 6382

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

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

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

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

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

Oracle資料庫的唯一約束

一 唯一約束的作用 保證字段值得唯一性。二 唯一約束和主鍵約束的區別 主鍵字段值必須是非空的。唯一約束允許有乙個空值。主鍵在每張表中只能有乙個。唯一約束在每張表中可以有多個。三 在建立表時設定唯一約束 1 在列級建立唯一約束 語法 create table table name column nam...

Oracle資料庫中違反唯一約束的處理

根據null的定義,null表示的是未知,因此兩個null比較的結果既不相等,也不不等,結果仍然是未知。根據這個定義,多個null值的存在應該不違反唯一約束。實際上oracle也是如此實現的 sql create table t id number 表已建立。sql alter table t ad...

Oracle 資料庫唯一約束中的NULL的處理

根據null的定義,null表示的是未知,因此兩個null比較的結果既不相等,也不不等,結果仍然是未知。根據這個定義,多個null值的存在應該不違反唯一約束。實際上oracle也是如此實現的 sql create table t id number 表已建立。sql alter table t ad...