国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL中處理各種重復(fù)的一些方法

2024-07-24 13:07:23
字體:
供稿:網(wǎng)友

這篇文章主要介紹了MySQL中處理各種重復(fù)的一些方法,包括對(duì)表和查詢結(jié)果的重復(fù)的一些處理,需要的朋友可以參考下

有時(shí)表或結(jié)果集包含重復(fù)的記錄。有時(shí)它是允許的,但有時(shí)它需要停止重復(fù)的記錄。有時(shí)它需要識(shí)別重復(fù)的記錄從表中刪除。本章將介紹如何防止發(fā)生在一個(gè)表中重復(fù)的記錄如何刪除已經(jīng)存在的重復(fù)記錄。

防止重復(fù)表中的發(fā)生:

可以使用PRIMARY KEY或UNIQUE索引的表上相應(yīng)的字段來防止重復(fù)的記錄。讓我們舉一個(gè)例子,下面的表中不包含這樣的索引或主鍵,所以它會(huì)允許記錄first_name和last_name重復(fù)

 

 
  1. CREATE TABLE person_tbl 
  2. first_name CHAR(20), 
  3. last_name CHAR(20), 
  4. sex CHAR(10) 
  5. ); 

可以使用PRIMARY KEY或UNIQUE索引的表上相應(yīng)的字段防止重復(fù)的記錄。讓我們舉一個(gè)例子,下面的表中不包含這樣的索引或主鍵,所以它會(huì)允許重復(fù)first_name和last_name記錄

 

 
  1. CREATE TABLE person_tbl 
  2. first_name CHAR(20) NOT NULL
  3. last_name CHAR(20) NOT NULL
  4. sex CHAR(10) 
  5. PRIMARY KEY (last_name, first_name) 
  6. ); 

表中的唯一索引的存在通常會(huì)導(dǎo)致錯(cuò)誤的發(fā)生,如果表中插入一條記錄,重復(fù)定義索引的列或列中的現(xiàn)有記錄。

使用INSERT IGNORE而不是INSERT。如果記錄不重復(fù)現(xiàn)有的記錄,MySQL將插入它像往常一樣。如果記錄是重復(fù)IGNORE關(guān)鍵字告訴MySQL靜靜地拋棄它,而不會(huì)產(chǎn)生錯(cuò)誤。

下面的示例中沒有錯(cuò)誤,同時(shí)也不會(huì)插入重復(fù)的記錄。

 

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

使用替換而不是INSERT。如果記錄是新的它INSERT插入。如果它是一個(gè)重復(fù)的,新的記錄將取代舊的:

 

 
  1. mysql> REPLACE INTO person_tbl (last_name, first_name) 
  2. -> VALUES'Ajay''Kumar'); 
  3. Query OK, 1 row affected (0.00 sec) 
  4. mysql> REPLACE INTO person_tbl (last_name, first_name) 
  5. -> VALUES'Ajay''Kumar'); 
  6. Query OK, 2 rows affected (0.00 sec) 

使用REPLACE而不是INSERT。如果記錄是新的它INSERT插入。如果它是一個(gè)重復(fù)的,新的記錄將取代舊的:

強(qiáng)制唯一性的另一種方法是添加一個(gè)UNIQUE索引,而不是一個(gè)PRIMARY KEY表。

 

 
  1. CREATE TABLE person_tbl 
  2. first_name CHAR(20) NOT NULL
  3. last_name CHAR(20) NOT NULL
  4. sex CHAR(10) 
  5. UNIQUE (last_name, first_name) 
  6. ); 

計(jì)算和確定重復(fù):

以下是查詢數(shù)first_name和last_name表中的重復(fù)記錄。

 

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

這個(gè)查詢將返回一個(gè)列表的所有person_tbl表中重復(fù)的記錄。在一般情況下,識(shí)別重復(fù)的值,請(qǐng)執(zhí)行以下操作:

確定哪一列包含的值可能會(huì)重復(fù)。

在列選擇列表中隨著COUNT(*)列出的那些列。

以及在GROUP BY子句中列出的列。

新增的HAVING子句消除了獨(dú)特的值要求的組數(shù)大于1。

消除重復(fù)查詢結(jié)果:

可以使用DISTINCT與SELECT語句一起找出表中唯一的紀(jì)錄。

 

 
  1. mysql> SELECT DISTINCT last_name, first_name 
  2. -> FROM person_tbl 
  3. -> ORDER BY last_name; 

DISTINCT是添加一個(gè)GROUP BY子句中命名的列,選擇的另一種方法。這具有除去重復(fù)和只選擇的獨(dú)特的組合中的指定的列的值的效果:

 

 
  1. mysql> SELECT last_name, first_name 
  2. -> FROM person_tbl 
  3. -> GROUP BY (last_name, first_name); 

刪除重復(fù)使用表更換:

如果在一個(gè)表中有重復(fù)的記錄,想從該表中刪除所有的重復(fù)記錄,看看下面程序的例子。

 

 
  1. mysql> CREATE TABLE tmp SELECT last_name, first_name, sex 
  2. -> FROM person_tbl; 
  3. -> GROUP BY (last_name, first_name); 
  4. mysql> DROP TABLE person_tbl; 
  5. mysql> ALTER TABLE tmp RENAME TO person_tbl; 

從一個(gè)表中刪除重復(fù)記錄的一個(gè)簡(jiǎn)單的方法是添加KEY,表索引或PRIMAY。如果該表已經(jīng)是可用的,那么使用此方法刪除重復(fù)的記錄。

 

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 葫芦岛市| 商城县| 新干县| 合川市| 钟山县| 耿马| 五原县| 田东县| 固安县| 大兴区| 西乡县| 腾冲县| 西青区| 思茅市| 平和县| 西乌| 壤塘县| 和静县| 贵溪市| 甘肃省| 黔东| 邯郸市| 财经| 湘西| 眉山市| 许昌市| 张家川| 淮阳县| 昭平县| 密云县| 佛坪县| 峨山| 浠水县| 仙桃市| 兰溪市| 嘉峪关市| 柳州市| 珠海市| 乐陵市| 龙里县| 上杭县|