我們主要從以下幾個方面來對數(shù)據(jù)庫當中重復(fù)數(shù)據(jù)的處理:
MySQL保證數(shù)據(jù)唯一性
在數(shù)據(jù)庫當中袜啃,有些數(shù)據(jù)我們是允許其能夠重復(fù)存在又活,但是有時候我們也需要刪除這些重復(fù)的數(shù)據(jù)伙菊。若是要防止數(shù)據(jù)重復(fù)存在,可以通過以下幾種方式來設(shè)置:
- 將字段修飾為private key或unique
- 如果是要設(shè)置兩個字段的數(shù)據(jù)不重復(fù)可以通過設(shè)置雙主鍵的模式來確保兩個字段的唯一性
create table student(id int,firstName varchar(20),lastName varchar(20),private key(firstName,lastName))
- 給字段設(shè)置唯一索引坦冠,這樣重復(fù)的數(shù)據(jù)在插入的時候就無法執(zhí)行
- 使用insert ignore into插入數(shù)據(jù):當數(shù)據(jù)庫當中沒有數(shù)據(jù)领迈,就插入新的數(shù)據(jù)彻磁,如果已經(jīng)有數(shù)據(jù)則跳過這條數(shù)據(jù),不會出錯也不會插入新紀錄
- replace into,如果存在primary或Unique相同的紀錄狸捅,則先刪除再插入
統(tǒng)計重復(fù)數(shù)據(jù)
- 使用group by
select count(*) as repetitions,firstName,lastName from person group by firstName,lastName having repetitions > 1;
過濾掉重復(fù)的數(shù)據(jù)
- 查詢的時候使用關(guān)鍵字distinct
mysql> select distinct firstName,lastName from person;
- 查詢的時候使用group by
select firstName,lastName from person group by firstName,lastName;
刪除重復(fù)的數(shù)據(jù)
給相應(yīng)的字段設(shè)置主鍵或唯一的索引
alter ignore table person add primary key(firstName,lastName)