對(duì)于常規(guī)的MySQL數(shù)據(jù)表中可能存在重復(fù)的數(shù)據(jù),有些情況是允許重復(fù)數(shù)據(jù)的存在,有些情況是不允許的,這個(gè)時(shí)候我們就需要查找并刪除這些重復(fù)數(shù)據(jù),以下是具體的處理方法!
方法一:防止表中出現(xiàn)重復(fù)數(shù)據(jù)
當(dāng)表中未添加數(shù)據(jù)時(shí),可以在MySQL數(shù)據(jù)表中設(shè)置指定的字段為PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數(shù)據(jù)的唯一性。
例如在學(xué)生信息表中學(xué)號(hào)no不允許重復(fù),需設(shè)置學(xué)號(hào)no為主鍵,且默認(rèn)值不能為NULL。
CREATE TABLE student
(
no CHAR(12) NOT NULL,
name CHAR(20),
sex CHAR(10),
PRIMARY KEY (no)
);
方法二:過濾刪除重復(fù)值
對(duì)于數(shù)據(jù)表中原有的數(shù)據(jù),想要去除重復(fù)數(shù)據(jù)需要經(jīng)過重復(fù)數(shù)據(jù)查找、過濾以及刪除等步驟。
1. 統(tǒng)計(jì)重復(fù)數(shù)據(jù)
mysql> SELECT COUNT(*) as repetitions,no
-> FROM student
-> GROUP BY no
-> HAVING repetitions > 1;
以上查詢語句將返回student表中重復(fù)的記錄數(shù)。
2. 過濾重復(fù)數(shù)據(jù)
如果需要讀取不重復(fù)的數(shù)據(jù)可以在SELECT 語句中使用 DISTINCT 關(guān)鍵字來過濾重復(fù)數(shù)據(jù)。
mysql> SELECT DISTINCT no
-> FROM student;
也可以使用 GROUP BY 來讀取數(shù)據(jù)表中不重復(fù)的數(shù)據(jù)
mysql> SELECT no
-> FROM student
-> GROUP BY (no);
3. 刪除重復(fù)數(shù)據(jù)
刪除數(shù)據(jù)表中重復(fù)數(shù)據(jù),可以使用以下SQL語句:
mysql> CREATE TABLE tmp SELECT no, name, sex FROM student GROUP BY (no, sex);
mysql> DROP TABLE student;
mysql> ALTER TABLE tmp RENAME TO student;
也可以在數(shù)據(jù)表中添加INDEX(索引)和 PRIMAY KEY(主鍵)來刪除表中的重復(fù)記錄,方法如下:
mysql> ALTER IGNORE TABLE student
-> ADD PRIMARY KEY (no);
聯(lián)系客服