最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL處理重復(fù)數(shù)據(jù)的學(xué)習(xí)筆記

 更新時(shí)間:2020年03月04日 10:48:26   作者:peijz  
在本篇文章里小編給大家分享的是一篇關(guān)于MySQL處理重復(fù)數(shù)據(jù)的學(xué)習(xí)筆記,需要的朋友們可以參考下。

MySQL 處理重復(fù)數(shù)據(jù)

有些 MySQL 數(shù)據(jù)表中可能存在重復(fù)的記錄,有些情況我們?cè)试S重復(fù)數(shù)據(jù)的存在,但有時(shí)候我們也需要?jiǎng)h除這些重復(fù)的數(shù)據(jù)。

本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復(fù)數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù)。

防止表中出現(xiàn)重復(fù)數(shù)據(jù)

你可以在 MySQL 數(shù)據(jù)表中設(shè)置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來(lái)保證數(shù)據(jù)的唯一性。

讓我們嘗試一個(gè)實(shí)例:下表中無(wú)索引及主鍵,所以該表允許出現(xiàn)多條重復(fù)記錄。

CREATE TABLE person_tbl
(
  first_name CHAR(20),
  last_name CHAR(20),
  sex CHAR(10)
);

如果你想設(shè)置表中字段 first_name,last_name 數(shù)據(jù)不能重復(fù),你可以設(shè)置雙主鍵模式來(lái)設(shè)置數(shù)據(jù)的唯一性, 如果你設(shè)置了雙主鍵,那么那個(gè)鍵的默認(rèn)值不能為 NULL,可設(shè)置為 NOT NULL。如下所示:

CREATE TABLE person_tbl
(
  first_name CHAR(20) NOT NULL,
  last_name CHAR(20) NOT NULL,
  sex CHAR(10),
  PRIMARY KEY (last_name, first_name)
);

如果我們?cè)O(shè)置了唯一索引,那么在插入重復(fù)數(shù)據(jù)時(shí),SQL 語(yǔ)句將無(wú)法執(zhí)行成功,并拋出錯(cuò)。

INSERT IGNORE INTO 與 INSERT INTO 的區(qū)別就是 INSERT IGNORE 會(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ù)的目的。

以下實(shí)例使用了 INSERT IGNORE INTO,執(zhí)行后不會(huì)出錯(cuò),也不會(huì)向數(shù)據(jù)表中插入重復(fù)數(shù)據(jù):

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
  -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
  -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO 當(dāng)插入數(shù)據(jù)時(shí),在設(shè)置了記錄的唯一性后,如果插入重復(fù)數(shù)據(jù),將不返回錯(cuò)誤,只以警告形式返回。 而 REPLACE INTO 如果存在 primary 或 unique 相同的記錄,則先刪除掉。再插入新記錄。

另一種設(shè)置數(shù)據(jù)的唯一性方法是添加一個(gè) UNIQUE 索引,如下所示:

CREATE TABLE person_tbl
(
  first_name CHAR(20) NOT NULL,
  last_name CHAR(20) NOT NULL,
  sex CHAR(10),
  UNIQUE (last_name, first_name)
);

統(tǒng)計(jì)重復(fù)數(shù)據(jù)

以下我們將統(tǒng)計(jì)表中 first_name 和 last_name的重復(fù)記錄數(shù):

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
  -> FROM person_tbl
  -> GROUP BY last_name, first_name
  -> HAVING repetitions > 1;

以上查詢語(yǔ)句將返回 person_tbl 表中重復(fù)的記錄數(shù)。 一般情況下,查詢重復(fù)的值,請(qǐng)執(zhí)行以下操作:

  • 確定哪一列包含的值可能會(huì)重復(fù)。
  • 在列選擇列表使用COUNT(*)列出的那些列。
  • 在GROUP BY子句中列出的列。
  • HAVING子句設(shè)置重復(fù)數(shù)大于1。

過(guò)濾重復(fù)數(shù)據(jù)

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

mysql> SELECT DISTINCT last_name, first_name
  -> FROM person_tbl;

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

mysql> SELECT last_name, first_name
  -> FROM person_tbl
  -> GROUP BY (last_name, first_name);

刪除重復(fù)數(shù)據(jù)

如果你想刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù),你可以使用以下的SQL語(yǔ)句:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

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

mysql> ALTER IGNORE TABLE person_tbl
  -> ADD PRIMARY KEY (last_name, first_name);

以上就是MySQL處理重復(fù)數(shù)據(jù)的學(xué)習(xí)筆記的詳細(xì)內(nèi)容,更多關(guān)于MySQL處理重復(fù)數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL實(shí)現(xiàn)批量插入以優(yōu)化性能的教程

    MySQL實(shí)現(xiàn)批量插入以優(yōu)化性能的教程

    這篇文章主要介紹了MySQL實(shí)現(xiàn)批量插入以優(yōu)化性能的教程,文中給出了運(yùn)行時(shí)間來(lái)表示性能優(yōu)化后的對(duì)比,需要的朋友可以參考下
    2015-04-04
  • 解決Mysql同步到ES時(shí)date和time字段類型轉(zhuǎn)換問(wèn)題

    解決Mysql同步到ES時(shí)date和time字段類型轉(zhuǎn)換問(wèn)題

    這篇文章主要介紹了Mysql同步到ES時(shí)date和time字段類型轉(zhuǎn)換問(wèn)題解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • MySQL中獲取時(shí)間的所有方法小結(jié)

    MySQL中獲取時(shí)間的所有方法小結(jié)

    在MySQL數(shù)據(jù)庫(kù)開(kāi)發(fā)中,獲取時(shí)間是一個(gè)常見(jiàn)的需求,MySQL提供了多種方法來(lái)獲取當(dāng)前日期、時(shí)間和時(shí)間戳,并且可以對(duì)時(shí)間進(jìn)行格式化、計(jì)算和轉(zhuǎn)換,本文介紹了一些常用的MySQL時(shí)間函數(shù)及其示例,需要的朋友可以參考下
    2024-07-07
  • MySQL 中查找含有目標(biāo)字段的表的方法

    MySQL 中查找含有目標(biāo)字段的表的方法

    這篇文章主要介紹了MySQL 中查找含有目標(biāo)字段的表的方法,即查找某個(gè)字段在哪個(gè)表中,這在一些場(chǎng)景中非常有用,需要的朋友可以參考下
    2015-06-06
  • mysql查詢字符串中某個(gè)字符串出現(xiàn)的次數(shù)(實(shí)例詳解)

    mysql查詢字符串中某個(gè)字符串出現(xiàn)的次數(shù)(實(shí)例詳解)

    這篇文章主要介紹了mysql查詢字符串中某個(gè)字符串出現(xiàn)的次數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • mysql函數(shù)拼接查詢concat函數(shù)的使用方法

    mysql函數(shù)拼接查詢concat函數(shù)的使用方法

    下面小編就為大家?guī)?lái)一篇mysql函數(shù)拼接查詢concat函數(shù)的使用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 簡(jiǎn)單介紹MySQL中的事務(wù)機(jī)制

    簡(jiǎn)單介紹MySQL中的事務(wù)機(jī)制

    這篇文章主要介紹了MySQL中的事務(wù)機(jī)制,通過(guò)實(shí)例介紹了大概的流程,需要的朋友可以參考下
    2015-04-04
  • mysql數(shù)據(jù)庫(kù)互為主從配置方法分享

    mysql數(shù)據(jù)庫(kù)互為主從配置方法分享

    共有四臺(tái)機(jī)器:A(10.1.10.28),B(10.1.10.29),C(10.1.10.30),D(10.1.10.31)。配置后結(jié)果:A-C互為主從,B為A的slave,D為C的slave
    2012-03-03
  • 詳解MySQL:數(shù)據(jù)完整性

    詳解MySQL:數(shù)據(jù)完整性

    這篇文章主要介紹了MySQL數(shù)據(jù)完整性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • mysql三張表連接建立視圖

    mysql三張表連接建立視圖

    本篇文章給大家分享了mysql三張表連接建立視圖的相關(guān)知識(shí)點(diǎn),有需要的朋友可以參考下。
    2018-06-06

最新評(píng)論

屯留县| 芜湖县| 东安县| 平邑县| 葫芦岛市| 甘洛县| 嘉黎县| 嘉定区| 栖霞市| 云梦县| 隆安县| 长兴县| 定南县| 裕民县| 安福县| 沈阳市| 松潘县| 松滋市| 唐山市| 酉阳| 贵德县| 德江县| 九龙坡区| 泰兴市| 监利县| 白朗县| 黑河市| 恩平市| 邻水| 新民市| 阳新县| 罗源县| 永靖县| 通化市| 达尔| 上饶市| 准格尔旗| 任丘市| 饶阳县| 磴口县| 桦甸市|