MySQL中處理各種重複的一些方法
有時表或結果集包含重複的記錄。有時它是允許的,但有時它需要停止重複的記錄。有時它需要識別重複的記錄從表中刪除。本章將介紹如何防止發生在一個表中重複的記錄如何刪除已經存在的重複記錄。
防止重複表中的發生:
可以使用PRIMARY KEY或UNIQUE索引的表上相應的欄位來防止重複的記錄。讓我們舉一個例子,下面的表中不包含這樣的索引或主鍵,所以它會允許記錄first_name和last_name重複
?
123456 |
CREATE TABLE person_tbl ( first_name CHAR (20), last_name CHAR (20), sex CHAR (10) );
|
可以使用PRIMARY KEY或UNIQUE索引的表上相應的欄位防止重複的記錄。讓我們舉一個例子,下面的表中不包含這樣的索引或主鍵,所以它會允許重複first_name和last_name記錄
?
1234567 |
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) );
|
表中的唯一索引的存在通常會導致錯誤的發生,如果表中插入一條記錄,重複定義索引的列或列中的現有記錄。
使用INSERT IGNORE而不是INSERT。如果記錄不重複現有的記錄,MySQL將插入它像往常一樣。如果記錄是重複IGNORE關鍵字告訴MySQL靜靜地拋棄它,而不會產生錯誤。
下面的示例中沒有錯誤,同時也不會插入重複的記錄。
?
123456 |
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。如果記錄是新的它INSERT插入。如果它是一個重複的,新的記錄將取代舊的:
?
123456 |
mysql> REPLACE INTO person_tbl (last_name, first_name) -> VALUES ( 'Ajay' , 'Kumar' ); Query OK, 1 row affected (0.00 sec) mysql> REPLACE INTO person_tbl (last_name, first_name) -> VALUES ( 'Ajay' , 'Kumar' ); Query OK, 2 rows affected (0.00 sec)
|
使用REPLACE而不是INSERT。如果記錄是新的它INSERT插入。如果它是一個重複的,新的記錄將取代舊的:
強制唯一性的另一種方法是新增一個UNIQUE索引,而不是一個PRIMARY KEY表。
?
1234567 |
CREATE TABLE person_tbl ( first_name CHAR (20) NOT NULL , last_name CHAR (20) NOT NULL , sex CHAR (10) UNIQUE (last_name, first_name) );
|
計算和確定重複:
以下是查詢數first_name和last_name表中的重複記錄。
?
1234 |
mysql> SELECT COUNT (*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
|
這個查詢將返回一個列表的所有person_tbl表中重複的記錄。在一般情況下,識別重複的值,請執行以下操作:
確定哪一列包含的值可能會重複。
在列選擇列表中隨著COUNT(*)列出的那些列。
以及在GROUP BY子句中列出的列。
新增的HAVING子句消除了獨特的值要求的組數大於1。
消除重複查詢結果:
可以使用DISTINCT與SELECT語句一起找出表中唯一的紀錄。
?
123 |
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl -> ORDER BY last_name;
|
DISTINCT是新增一個GROUP BY子句中命名的列,選擇的另一種方法。這具有除去重複和只選擇的獨特的組合中的指定的列的值的效果:
?
123 |
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
|
刪除重複使用表更換:
如果在一個表中有重複的記錄,想從該表中刪除所有的重複記錄,看看下面程式的例子。
?
12345 |
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex -> FROM person_tbl; -> GROUP BY (last_name, first_name); mysql> DROP TABLE person_tbl; mysql> ALTER TABLE tmp RENAME TO person_tbl;
|
從一個表中刪除重複記錄的一個簡單的方法是新增KEY,表索引或PRIMAY。如果該表已經是可用的,那麼使用此方法刪除重複的記錄。
?
12 |
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2811116/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 處理重複資料MySql
- MySql避免重複插入記錄的幾種方法MySql
- Mysql如何處理重複資料?讓你的效率更高效MySql
- Kafka中避免重複訊息的5種有效方法Kafka
- 重複提交,你是如何處理的?
- mysql多源複製跳過錯誤處理方法MySql
- MySQL 當中的各種鎖(中級篇)MySql
- python中list的各種方法使用Python
- TS - 處理故障的一些通用方法
- c# 一些警告的處理方法C#
- Android處理按鈕重複點選Android
- linux中cp複製時處理軟連結的兩種方式Linux
- 查詢字串中第一個非重複字元的3種方法字串字元
- python與mysql互動中的各種坑PythonMySql
- 降低論文重複率的幾種修改方法!
- 資料處理之去除重複資料
- java日期時間各種變換及處理Java
- 數字影像處理--認識影像各種概念
- 原生JS去重(一)--兩種方法去掉重複字元JS字元
- mysql 刪除表中重複的資料MySql
- 合成實驗中,十三種後處理方法:實驗室常用13種後處理方法、故障及解決辦法
- 處理VM的一種特殊方法和思路
- Java 異常處理中的種種細節!Java
- 使用Apache POI 處理Miscrosoft Office各種格式檔案ApacheROS
- 自然語言處理中句子相似度計算的幾種方法自然語言處理
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- 淺談mysql中各種表空間(tablespaces)的概念MySql
- 使用SQL語句去掉重複記錄的兩種方法SQL
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- Android優雅地處理按鈕重複點選Android
- Spring Cloud Stream如何處理訊息重複消費?SpringCloud
- 【常用方法推薦】如何刪除MySQL的重複資料?MySql
- 專案02(Mysql gtid複製故障處理01)MySql
- 在MySQL資料庫中,這4種方式可以避免重複的插入資料!MySql資料庫
- js中我最常用的幾種遍歷處理資料的方法梳理JS
- MySQL儲存過程的異常處理方法MySql儲存過程
- 使用MySQL時遇到的各種坑MySql
- SpingMVC框架中去掉List中重複bean的方法MVC框架Bean