MySQL處理重複資料
阿新 • • 發佈:2019-01-14
在資料表中經常會存在重複的資料,而我們往往要對這些重複資料進行處理,包括:防止表中出現重複資料,查詢重複記錄,統計重複資料,過濾重複資料,刪除重複資料。
防止表中出現重複資料:
若我們如下建立一張表,建立時未設定主鍵或者索引,則該表允許出現重複記錄:
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);