1. 程式人生 > >MySQL處理重複資料

MySQL處理重複資料

在資料表中經常會存在重複的資料,而我們往往要對這些重複資料進行處理,包括:防止表中出現重複資料,查詢重複記錄,統計重複資料,過濾重複資料,刪除重複資料。

防止表中出現重複資料:

若我們如下建立一張表,建立時未設定主鍵或者索引,則該表允許出現重複記錄:

create table person(
first_name varchar(20),
last_name varchar(20),
sex varchar(10)
);

此時使用如下兩種方式可以有效防止表中出現重複的資料:

  • 設定指定的欄位為PRIMARY KEY
create table
person( first_name varchar(20) not null, last_name varchar(20) not null, sex varchar(10), primary key(first_name,last_name) );

注:因為此處設定雙主鍵模式來設定資料的唯一性,所以這兩個鍵的預設值不能為null,故都設定為not null

  • 設定UNIQUE索引
CREATE TABLE person(
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL,
sex VARCHAR(10
), UNIQUE(first_name,last_name) );

查詢重複記錄:

這裡舉兩個例子:

  • 查詢user表中重複的user_name的個數
SELECT user_name,COUNT(*) AS COUNT
FROM USER
GROUP BY user_name HAVING COUNT>1;
  • 查詢people表中id相同的所有資訊
SELECT * FROM people 
WHERE id IN(SELECT id FROM people GROUP BY id HAVING COUNT(id)>1);

統計重複資訊:

以下程式碼統計person_tbl中first_name和last_name的重複記錄數:

SELECT COUNT(*)AS repetitons,last_name,first_name
FROM person_tbl
GROUP BY first_name,last_name
HAVING repetitons > 1;

一般情況下,查詢重複的值,請執行以下操作:

  • 確定哪一列包含的值可能會重複
  • 在列選擇列表使用count(*)列出的那些列
  • 在GROUP BY子句中列出的列
  • Having子句設定重複數大於1

過濾重複資訊:


如果你需要讀取不重複的資料在select語句中使用DISTINCT關鍵字來過濾重複資料

SELECT DISTINCT last_name,first_name
FROM person_tbl
ORDER BY last_name;

你也可以使用GROUP BY來讀取資料表中不重複的資料:

SELECT first_name,last_name
FROM person_tbl
GROUP BY(first_name,last_name);

刪除重複資訊:

如果你想刪除資料表中的重複資料,可以使用以下SQL語句:

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

當然,在資料表中新增index和primary key可以更簡單的刪除表中重複記錄:

ALTER IGNORE TABLE person
ADD PRIMARY KEY(first_name,last_name);