精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

明明加了唯一索引,為何還有重復數據

開發
本文通過還原唯一索引失效的場景,得出當多列唯一索引中的某一列有為Null的值時,唯一索引會失效。

上一篇文章講了表設計的18條軍規,其中講到了唯一索引的坑,今天就來細說一下。

閉眼建表所需的18條軍規

在之前的工作中,遇到過一次唯一索引的 Bug,今天就分享分享,省的有同兄弟踩坑里。

為眾人抱薪者,不可使其凍斃于風雪。兄弟們一鍵三連?。。。「兄x!


一、現場還原

先看表結構,其中 name、age、city 三個字段創建一個聯合唯一索引。

CREATE TABLE `test` (
  `id` int NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `age` int DEFAULT NULL,
  `city` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`,`age`,`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

如果在這三個字段上創建一個聯合唯一索引,那么就不會存在兩行數據在這三個字段上的值完全相同。

下面來看一組數據。

通過上圖可以看到,北京的張三有多個,畢竟年齡可以不一樣嗎,其中有兩個 age 為空的,同樣上海的李四也有多個。

有的同學可能會說了,是不是唯一索引沒生效啊,那我們現在試一下唯一索引的生效情況。

可以看到已經報錯,對于這個唯一索引已經出現了重復的數據,那么究竟是什么造成了唯一索引的失效呢?

二、原因分析

就是因為我們插入的數據中 age 為 Null 導致的。在 MySQL 官方文檔中也有說明,Null 與任何值都不相等,包括與另一個 Null 比較。

MySQL 關于Null 描述地址:https://dev.mysql.com/doc/refman/8.4/en/problems-with-null.html

所以結論就是:當多個字段一起創建唯一索引時,需要設置每一項字段非空,如果其中一項出現 Null 值,MySQL 的唯一索引會失效。

三、邏輯刪除

說到唯一索引,就要想到有邏輯刪除這個東西,對于現在的系統來說,10個系統里面8個是用邏輯刪除。

對于系統中記錄的刪除,一般是兩種,一種是物理刪除,也就是使用delete語句進行刪除。另一種就是使用邏輯刪除,在表中增加一個刪除標記字段,比如deleted,默認0,當需要刪除時改為1。

通過物理刪除的數據,在表中是查詢不出來的,不過可以通過 binlog 進行恢復,如果你感興趣,歡迎評論區留言,下一篇咱就講一下如何還原數據。

通過邏輯刪除的數據,在表中還是存在的,只是刪除標記deleted變成了1。

我們還拿上面那張表舉例,假如我們刪除了張三、18、北京這條記錄,如果后面再次插入張三、18、北京這條數據是無法插入的,因為我們創建的唯一索引是name、`age、city三個字段。

那么這種情況我們可以怎么解決呢?

有的同學可能就會說了,在上面name、`age、city唯一索引的基礎上,增加deleted,創建4個字段的唯一索引不就行了。

那么真的可以嗎?

還是那句話,用上面的表舉個栗子:

下面跟我一起來看下如何解決?

四、刪除狀態加1

第一種方式就是刪除狀態加1,現在我們表中deleted默認0,如果刪除了之后就是1,那么我們更改為,deleted默認0,刪除之后獲取當前相同記錄的最大刪除狀態,然后加1。

舉個栗子:

通過上面的例子可以看出來,每次刪除記錄,當前記錄的刪除標記deleted都會獲取當前相同記錄的最大刪除狀態,然后加1進行刪除。

這樣deleted 每次刪除的時候都是不一樣的,所以可以保證唯一索引的生效。

使用這種方案的缺點就是需要修改代碼中的sql邏輯,比如查詢deleted為1的刪除數據時需要改為deleted>1。

五、增加時間戳

除了上面這種對刪除狀態進行加1的方式外,還可以增加一個時間戳字段,創建name、`age、city、timestamp四個字段的聯合唯一索引。

時間戳一般精確到秒,如果并發高,還是可能生成重復數據,那么時間戳的話可以精確到毫秒。

然后設置時間戳字段默認值為1,當進行邏輯刪除刪除時,直接插入當前時間的時間戳。

這種方案的優點就是不用修改原來代碼邏輯,缺點就是極限情況下還是可能會產生重復數據。

六、增加刪除ID

我們還可以使用增加刪除ID的方法來進行去重。

創建唯一索引name、`age、city、deleted_id。

插入數據時deleted_id默認1,當進行邏輯刪除時修改為當前記錄的主鍵ID。

這種方法與增加時間戳字段類似,優點就是可以解決時間戳字段的重復數據問題,并且無需修改現有系統的刪除邏輯,也可以保證數據的唯一,所以如果再有邏輯刪除的表中,推薦使用這種方式。

七、歷史數據加唯一索引

在上面的幾個方案中,都是對新表添加的唯一索引,現在有一張歷史數據表,其中還有重復數據,那么我們該如何添加索引呢?

我們使用deleted_id的方案,首先獲取出相同記錄的最大ID,然后將這些記錄的deleted_id設置為1,然后其他的記錄deleted_id就是當前記錄的主鍵,這樣我們就可以區分表中的重復數據了。

當表中的deleted_id都有值之后,創建唯一索引name、`age、city、deleted_id。

八、大字段添加唯一索引

創建索引的要求大家應該都知道,字段不可以太大,因為索引本身大了之后檢索的效率也是很低的。

關于MySQL 中 InnoDB 引擎的限制可以查看這個鏈接:https://dev.mysql.com/doc/refman/8.4/en/innodb-limits.html

對于大的字段添加唯一索引,可以使用hash算法,創建一個hash字段,將大字段進行Hash運算之后的結果保存到 hash 中,然后創建唯一索引name、age、city、hash。

用到Hash算法,肯定就會有Hash沖突,所以這種方案會帶來一個問題就是不同的值Hash卻相同。

所以創建多列的聯合唯一索引時需要在增加一個其他的字段進行區分。

還有一種方案就是不使用唯一索引,使用唯一索引的目的就是去重,直接代碼層面MQ、單線程處理等。

總結

本文通過還原唯一索引失效的場景,得出當多列唯一索引中的某一列有為Null的值時,唯一索引會失效。

總結出在有邏輯刪除的業務表中,可以通過刪除狀態值加1、增加時間戳字段、增加刪除ID字段三種方式進行添加多列唯一索引。

最后還給出了如何對歷史重復數據添加唯一索引以及使用hash給大字段添加唯一索引的方式。

責任編輯:趙寧寧 來源: 醉魚Java
相關推薦

2022-08-04 08:22:49

MySQL索引

2016-08-05 14:33:19

MySQL索引數據庫

2023-01-03 07:44:53

MySQL查詢重復

2020-10-29 09:19:11

索引查詢存儲

2025-06-12 03:25:00

2024-03-11 05:00:00

Python集合開發

2011-04-13 13:05:14

重復數據刪除

2024-03-26 12:16:13

MySQLInnodb數據庫

2023-02-26 00:00:06

MySQL索引故障

2021-11-30 10:00:01

SQL數據重復

2011-08-18 11:18:25

Oracle唯一約束唯一索引

2025-01-24 00:00:00

數據RoaringBitmap

2024-10-16 17:04:13

2011-04-13 13:13:09

重復數據刪除

2023-02-26 23:31:01

SQL數據庫

2019-10-21 09:55:12

數據庫PostgreSQL Oracle

2022-03-07 10:54:34

內存Linux

2009-02-27 10:18:41

重復數據刪除In-linePost-Proces

2010-07-07 16:53:54

SQL Server重

2021-04-08 10:55:53

MySQL數據庫代碼
點贊
收藏

51CTO技術棧公眾號

劲爆欧美第一页| 久久精品国产99久久99久久久| 欧美一区二区少妇| 男人的天堂亚洲一区| 久久综合伊人77777| 亚洲免费观看在线| 亚洲伦乱视频| 亚洲乱码国产乱码精品精的特点| 精品久久蜜桃| 91精品国产乱码久久| 亚洲第一黄网| 日韩在线播放av| 黄色网址在线视频| 精品999日本久久久影院| 婷婷六月综合网| 国产又大又长又粗又黄| 日韩精品视频在线观看一区二区三区| 九九精品视频在线看| 国模吧一区二区三区| 少妇视频在线播放| 国产精品毛片久久久| 欧美日韩美女一区二区| 日韩av一二三四区| 日本天码aⅴ片在线电影网站| 久久亚洲一区二区三区明星换脸| 成人激情春色网| 永久免费无码av网站在线观看| 一区二区三区毛片免费| 在线播放亚洲激情| 亚洲专区区免费| 99a精品视频在线观看| 欧美日韩国产综合一区二区 | 91在线播放网站| 99精品久久免费看蜜臀剧情介绍| 成人福利网站在线观看11| 国产精品视频123| 中文高清一区| 久久免费精品视频| 亚洲国产美女视频| 欧美顶级大胆免费视频| 亚洲欧美一区二区三区情侣bbw| 少妇搡bbbb搡bbb搡打电话| 亚洲国产91视频| 精品视频全国免费看| 国产无套内射久久久国产| av在线资源| 一区二区三区国产精品| 天天在线免费视频| 国内精品不卡| 亚洲伦在线观看| 中国女人做爰视频| 国产区在线观看| 亚洲免费观看高清完整版在线观看| 涩涩涩999| 最新电影电视剧在线观看免费观看| 91美女视频网站| 日本精品二区| 午夜免费福利在线观看| 国产精品乱子久久久久| 一区二区不卡在线| 韩国av网站在线| 亚洲天堂免费看| 久久免费一级片| 欧美6一10sex性hd| 亚洲第一成人在线| 狠狠97人人婷婷五月| 原纱央莉成人av片| 日本韩国欧美三级| 亚洲欧美偷拍另类| 精品一区91| 精品88久久久久88久久久| 一级欧美一级日韩片| 日本妇女一区| 夜夜嗨av一区二区三区免费区 | 亚洲人123区| 青青青在线观看视频| av有码在线观看| 日韩欧美在线网址| 日本不卡一区在线| 一区二区三区高清在线观看| 亚洲高清av在线| 法国空姐电影在线观看| 国产精品videosex性欧美| 欧美精品在线极品| 久久一区二区三区视频| 麻豆国产91在线播放| 97超级在线观看免费高清完整版电视剧| 囯产精品久久久久久| 久久色在线视频| 成年人免费观看的视频| 丁香影院在线| 欧美午夜免费电影| 国偷自产av一区二区三区麻豆| 特黄特色欧美大片| 精品国产欧美一区二区五十路| 久久视频免费看| 日日夜夜免费精品视频| 亚洲在线视频福利| 日本大片在线观看| 亚洲美女在线国产| 激情六月丁香婷婷| 91亚洲无吗| 中文字幕精品国产| 国产污污视频在线观看| 精一区二区三区| 欧美综合激情| 福利在线导航136| 欧美日韩在线三级| 天天插天天射天天干| 国产精品91一区二区三区| 97久久国产精品| 91禁在线观看| 国产欧美综合色| 污污污污污污www网站免费| 成人软件在线观看| 亚洲精品91美女久久久久久久| 天天操夜夜操av| 久久影院亚洲| 国产手机精品在线| 91国内在线| 欧美日韩高清影院| 人妻av无码一区二区三区| 亚洲黄色在线| 97超碰最新| 嫩草在线视频| 欧美专区日韩专区| 黄瓜视频污在线观看| 精品动漫3d一区二区三区免费| 国产日韩精品在线观看| 青青草手机在线| 午夜电影久久久| 特种兵之深入敌后| 婷婷精品进入| 成人亲热视频网站| 日本三级在线播放完整版| 欧美视频中文字幕在线| 日本道中文字幕| 亚洲视频一二| 国产精品久久精品国产| 亚洲精品天堂| 日韩视频免费观看高清在线视频| 久久爱一区二区| 久久99精品一区二区三区三区| 日韩精品欧美专区| 在线成人视屏| 伊人成人开心激情综合网| 日韩av大片在线观看| av亚洲精华国产精华精| 激情深爱综合网| 牛牛视频精品一区二区不卡| 久久久久久中文字幕| 黄色av免费观看| 午夜精品久久久久久久久久| 激情av中文字幕| 亚洲人人精品| 蜜桃日韩视频| 欧美自拍电影| 中文字幕久热精品视频在线| 老熟妇一区二区三区啪啪| 国产精品私人影院| 不卡亚洲精品| 一区二区免费看| 国产精品成人免费一区久久羞羞| 欧美1区3d| 国产精品美女久久久久av福利| 性欧美videoshd高清| 日韩丝袜美女视频| 黄色一级视频免费观看| 国产不卡视频一区| 欧美深夜福利视频| 亚洲精品亚洲人成在线| 国产国语刺激对白av不卡| 超碰在线影院| 欧美一区二区三区在线看| 全网免费在线播放视频入口| 国产iv一区二区三区| 亚洲 高清 成人 动漫| 精品免费一区二区| 91在线观看免费| 成入视频在线观看| 亚洲香蕉成人av网站在线观看| 一级特黄录像免费看| 亚洲综合久久av| 强伦人妻一区二区三区| 人人精品人人爱| 日本一级黄视频| 九九精品在线| 91免费在线视频| 九色porny丨首页入口在线| 一区二区三区四区视频| 国产三级小视频| 午夜精品一区二区三区三上悠亚| 丰满少妇高潮一区二区| 极品少妇xxxx精品少妇偷拍| 日韩欧美不卡在线| 成人久久一区| 国产精品区二区三区日本| 色香欲www7777综合网| 久久在精品线影院精品国产| 爽爽视频在线观看| 9191精品国产综合久久久久久| 精品视频在线观看免费| 中文字幕精品一区二区三区精品| 亚洲少妇一区二区| 秋霞国产午夜精品免费视频| 日本阿v视频在线观看| 日本午夜一区| 久久久久久九九| 国产一区二区高清在线| 国产mv免费观看入口亚洲| 91福利国产在线观看菠萝蜜| 亚洲人在线观看| 亚洲国产精品视频在线| 欧美色精品在线视频| 日本三级小视频| 亚洲综合丝袜美腿| 成年人网站在线观看视频| 久久免费看少妇高潮| 精品伦一区二区三区| 久久成人18免费观看| 白嫩少妇丰满一区二区| 亚洲激情专区| 99久热在线精品视频| 色135综合网| 欧美系列一区| 色爱综合av| 国产精品欧美久久| 一区中文字幕电影| 91免费观看网站| 午夜不卡一区| 国产精品热视频| 日本综合字幕| 97avcom| 蜜桃传媒在线观看免费进入 | 99人久久精品视频最新地址| 国产激情片在线观看| 欧美一区成人| 女同性恋一区二区| 五月精品视频| 一级黄色免费在线观看| 91精品国产91久久久久久密臀 | 天堂一区二区在线免费观看| 国产中文字幕二区| 99国产精品| 国产日韩一区二区在线| 在线亚洲自拍| 国产精品wwwww| 日韩精品三区四区| 在线免费观看视频黄| 日本欧美在线观看| www.99r| 国产福利电影一区二区三区| 亚洲高清av一区二区三区| 国产剧情在线观看一区二区| 色哟哟免费视频| 丁香婷婷综合激情五月色| 亚洲熟女一区二区三区| 成人av免费在线播放| 爱爱的免费视频| 国产日韩欧美精品在线| 久久精品在线观看视频| 亚洲色图一区二区三区| 九九视频在线免费观看| 精品国产成人在线| 久久国产乱子伦精品| 欧美综合在线视频| 夜夜狠狠擅视频| 91精品国产91热久久久做人人| 国产免费av观看| 精品国产乱码久久| 人妻无码中文字幕| 日韩国产在线看| 国产一区电影| 中文字幕日韩欧美精品在线观看| 五月香视频在线观看| 久久久97精品| 污视频在线免费观看网站| 91精品国产91久久久久久最新 | 欧美日韩激情视频8区| 国产午夜性春猛交ⅹxxx| 在线亚洲免费视频| 中文字幕网址在线| 91麻豆精品国产91久久久| 亚洲精品无遮挡| 亚洲免费电影一区| 亚洲伦理在线观看| 国产一区二区三区18| 精品孕妇一区二区三区| 蜜臀久久99精品久久久久久宅男| 免费男女羞羞的视频网站在线观看| 高清欧美性猛交xxxx| 裤袜国产欧美精品一区| 国产精品一区二区三区久久| 国内精品视频| 欧美日韩精品中文字幕一区二区| 日本不卡高清| 成年丰满熟妇午夜免费视频| 99精品视频免费| 精品少妇无遮挡毛片| 国产精品亚洲午夜一区二区三区 | www国产无套内射com| 久久精品官网| 性久久久久久久久久久久久久| 99精品国产一区二区三区不卡| 日韩av片在线免费观看| 亚洲午夜视频在线| 国产精品自拍第一页| 精品国产在天天线2019| 大乳在线免费观看| www亚洲欧美| 神马电影网我不卡| 亚洲一区二区在线| 亚洲老女人视频免费| 男女激烈动态图| 首页亚洲欧美制服丝腿| 折磨小男生性器羞耻的故事| 日本一区免费视频| 99免费在线观看| 日韩视频一区二区| av在线免费播放网站| 韩国精品美女www爽爽爽视频| www.一区| 欧美日韩一区二区视频在线观看| 婷婷激情综合| 午夜视频在线网站| 久久网这里都是精品| 久久久99精品| 欧美一级二级在线观看| yw193.com尤物在线| 欧美国产精品va在线观看| 99re8精品视频在线观看| 日本在线成人一区二区| 麻豆精品网站| 日本不卡视频一区| 一区二区三区在线观看视频| 国产欧美综合视频| 色偷偷偷综合中文字幕;dd| 一区二区电影免费观看| 久久精品aaaaaa毛片| 国产精品videosex极品| 国产成人精品综合久久久久99 | 亚洲美女精品久久| 成人影音在线| 97国产超碰| 激情欧美亚洲| 亚洲AV成人精品| 亚洲一区二区视频在线| 99热这里只有精品5| www.亚洲一区| 日本精品在线观看| 日韩video| 大白屁股一区二区视频| 校园春色 亚洲| 欧美一区二区免费观在线| av大片在线| 91情侣在线视频| 亚洲午夜电影| 喷水视频在线观看| 黄网站色欧美视频| 精品亚洲成a人片在线观看| 欧美最顶级的aⅴ艳星| 国产a久久精品一区二区三区 | 日韩av在线发布| 国产亚洲精品熟女国产成人| 偷窥少妇高潮呻吟av久久免费| av女名字大全列表| 欧亚精品中文字幕| 日韩高清欧美| 亚洲免费在线播放视频| 亚洲麻豆国产自偷在线| 天天躁日日躁狠狠躁喷水| 97在线免费观看| 欧美日韩精品一区二区视频| www.精品在线| 亚洲欧美区自拍先锋| 色呦呦中文字幕| 国产成人精品久久二区二区91| 日韩中字在线| 中文字幕乱妇无码av在线| 一区二区三区免费| 色中色在线视频| 国产精品一区av| 亚洲国产高清一区| 在线免费观看成年人视频| 色哟哟一区二区| 免费av在线网站| 国产v亚洲v天堂无码| 国内视频精品| 国产亚洲无码精品| 欧美色爱综合网| 免费看电影在线| 欧美一进一出视频| 久久99精品国产麻豆不卡| 九九热国产在线| 亚洲色图av在线| 日韩成人视屏| 日韩av高清在线看片| 国产精品久久久久久一区二区三区| 精品久久无码中文字幕| 国产成人亚洲综合|