亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747


前言

前段時(shí)間,很多人問(wèn)我能不能寫(xiě)一些數(shù)據(jù)庫(kù)的文章,正好自己在測(cè)試MySQL數(shù)據(jù)庫(kù)性能的時(shí)候,出現(xiàn)了一個(gè)問(wèn)題,也就是出現(xiàn)了很多重復(fù)的數(shù)據(jù),想起來(lái)自己long long ago寫(xiě)過(guò)一篇類似的,僅此就拿來(lái)總結(jié)了一下。如果你在使用mysql的時(shí)候也遇到了這個(gè)問(wèn)題,希望能對(duì)你有所幫助。

注意:

這篇文章不是數(shù)據(jù)庫(kù)系列的正式文章,有關(guān)mysql、MongoDB、redis、oracle等數(shù)據(jù)庫(kù)系列的文章正在整理中。

其實(shí)解決能否插入重復(fù)數(shù)據(jù)的問(wèn)題,一般情況下是有兩個(gè)思路,就像治水一樣,第一個(gè)就是從源頭,第二個(gè)就是在水流經(jīng)的路上。我們帶著這兩種思路繼續(xù)往下看:

問(wèn)題

在我們的mysql數(shù)據(jù)庫(kù)中,經(jīng)常會(huì)出現(xiàn)一些重復(fù)的數(shù)據(jù),有些情況我們?cè)试S重復(fù)數(shù)據(jù)的存在,但有時(shí)候我們也需要?jiǎng)h除這些重復(fù)的數(shù)據(jù)。 我們?nèi)绾稳ヌ幚砟兀?/p>

方法一:防止出現(xiàn)重復(fù)數(shù)據(jù)

也就是說(shuō)我們?cè)僭O(shè)計(jì)表的時(shí)候,就應(yīng)該對(duì)這些數(shù)據(jù)設(shè)置一個(gè)UNIQUE 索引,在插入的時(shí)候就可以保證其唯一性,也就不存在有重復(fù)的數(shù)據(jù)了。當(dāng)然你也可以直接設(shè)置為PRIMARY KEY(主鍵)。效果也是一樣的。 我們看一個(gè)案例:下表中無(wú)索引及主鍵,所以該表允許出現(xiàn)多條重復(fù)記錄。

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

目前first_name,last_name是可以重復(fù)的,如果不想重復(fù)這里有兩個(gè)解決辦法:

1、設(shè)置雙主鍵模式

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

現(xiàn)在就無(wú)法插入重復(fù)數(shù)據(jù)了。

2、添加unique索引

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

這兩種看起來(lái)形式好像有一點(diǎn)區(qū)別,但是能起到相同的作用。此時(shí)我們可以插入兩條重復(fù)的數(shù)據(jù),會(huì)發(fā)現(xiàn)報(bào)錯(cuò)。

當(dāng)然我們還可以在數(shù)據(jù)庫(kù)中去驗(yàn)證一下:

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

在這里我們統(tǒng)計(jì)的是 first_name 和 last_name的重復(fù)記錄數(shù),上面已經(jīng)用兩種方法設(shè)置了,這里肯定就是0了。

方法二:在插入時(shí)指定能否插入重復(fù)數(shù)據(jù)

在這里我們使用的是Insert ignore into 與Insert into指令。

(1)Insert ignore into會(huì)忽略數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù),如果數(shù)據(jù)庫(kù)沒(méi)有數(shù)據(jù),就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過(guò)這條數(shù)據(jù)。這樣就可以保留數(shù)據(jù)庫(kù)中已經(jīng)存在數(shù)據(jù),達(dá)到在間隙中插入數(shù)據(jù)的目的。

(2)Insert into則直接相反,會(huì)直接插入數(shù)據(jù),不管數(shù)據(jù)庫(kù)里面是否含有重復(fù)數(shù)據(jù)。

我們還是舉例說(shuō)明:

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

現(xiàn)在我們看出來(lái)了吧,也就是說(shuō)在執(zhí)行第一條插入操作的時(shí)候,看到數(shù)據(jù)庫(kù)沒(méi)有,則直接插入一條新紀(jì)錄,因此一行記錄受到影響,但是在第二次插入的時(shí)候,數(shù)據(jù)庫(kù)已經(jīng)有一條一樣的了,因此便不會(huì)插入了,0行受到影響。 當(dāng)然了還有一個(gè)指令也可以完成類似于insert ignore into相似的功能,那就是replace into。他表示的是如果存在primary 或 unique相同的記錄,則先刪除掉。再插入新記錄。

方法三:過(guò)濾重復(fù)數(shù)據(jù)

如果你需要讀取不重復(fù)的數(shù)據(jù)可以在 SELECT 語(yǔ)句中使用 DISTINCT 關(guān)鍵字來(lái)過(guò)濾重復(fù)數(shù)據(jù)。

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

你也可以使用 GROUP BY 來(lái)讀取數(shù)據(jù)表中不重復(fù)的數(shù)據(jù):

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

方法四:刪除重復(fù)數(shù)據(jù)

這種情況其實(shí)就相當(dāng)于,在水的終點(diǎn)處去解決。看下面sql語(yǔ)句:

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

當(dāng)然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡(jiǎn)單的方法來(lái)刪除表中的重復(fù)記錄。方法如下:

面試官:在使用mysql數(shù)據(jù)庫(kù)時(shí),遇到重復(fù)數(shù)據(jù)怎么處理?

 

OK,解決辦法這么多,相信能解決你的問(wèn)題。

分享到:
標(biāo)簽:重復(fù) 數(shù)據(jù) mysql
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定