MySQL 刪除重復(fù)數(shù)據(jù)
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了豐寧免費(fèi)建站歡迎大家使用!
有些 MySQL 數(shù)據(jù)表中可能存在重復(fù)的記錄,有些情況我們允許重復(fù)數(shù)據(jù)的存在,但有時(shí)候我們也需要?jiǎng)h除這些重復(fù)的數(shù)據(jù)。
本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復(fù)數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù)。
刪除重復(fù)數(shù)據(jù)
如果你想刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù),你可以使用以下的SQL語句:
from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識平臺
當(dāng)然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復(fù)記錄。方法如下:
MySQL 過濾重復(fù)數(shù)據(jù)
有些 MySQL 數(shù)據(jù)表中可能存在重復(fù)的記錄,有些情況我們允許重復(fù)數(shù)據(jù)的存在,但有時(shí)候我們也需要?jiǎng)h除這些重復(fù)的數(shù)據(jù)。
如果你需要讀取不重復(fù)的數(shù)據(jù)可以在 SELECT 語句中使用 DISTINCT 關(guān)鍵字來過濾重復(fù)數(shù)據(jù)。
from 樹懶學(xué)堂- 一站式數(shù)據(jù)知識學(xué)習(xí)平臺
你也可以使用 GROUP BY 來讀取數(shù)據(jù)表中不重復(fù)的數(shù)據(jù):
1、使用navicat連接上mysql數(shù)據(jù)庫,新建一張用戶表。
2、然后填入幾條測試內(nèi)容,來演示測試效果。
2、選中用戶名右擊選擇設(shè)計(jì)表。
3、然后在設(shè)計(jì)表里切換到索引選項(xiàng)卡。
4、這一步開始添加一條索引,如果對索引名稱沒有要求可以默認(rèn)為空,工具會自動(dòng)幫生成和字段名一樣的名稱。點(diǎn)擊欄位后面的按鈕出現(xiàn)選擇框,選擇需要唯一約束的字段,這里我們登錄名字段。
5、索引類型選擇,這里是關(guān)鍵,唯一性約束一定要選擇Unique類型。
6、最后添加完成唯一索引之后,修改下第三條數(shù)據(jù)的登錄名為bb和第二條一樣,然后點(diǎn)擊下方對號按鈕,進(jìn)行保存
7、此時(shí)保存時(shí)候就會報(bào)錯(cuò),提示"Duplicate entry 'bb' for key 'login_name'",重復(fù)的登錄名,不能保存成功,說明添加的唯一性約束生效了。
需求說明
1、我需要查詢某列不重復(fù)的數(shù)據(jù)
2、并且顯示不重復(fù)數(shù)據(jù)的所有項(xiàng)
sql語句如下
select * from data group by address;
如果是僅僅查詢某列不重復(fù)數(shù)據(jù),只需要一列
效果如下
sql語句
select DISTINCT address from data
這里有一個(gè)非常非常需要注意的地方:
SELECT DISTINCT [字段名]后面不能再跟其他的字段,否則檢索出來的記錄仍然會含有重復(fù)項(xiàng);
錯(cuò)誤寫法:
SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [檢索條件字句]
如果我們的記錄集里還需要有其他字段值 ,那怎么辦呢?
實(shí)際上,我們完全可以用另一種辦法來解決問題;只是需要用到子查詢而已!
使用GROUP BY 分組
有一點(diǎn)需要注意:
使用帶有GROUP BY字句的查詢語句時(shí),在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合組函數(shù)
所以用這樣一句SQL就可以去掉重復(fù)項(xiàng)了:
select * from msg group by terminal_id;
這樣就得到我們想要的結(jié)果集了:
//查詢表中的數(shù)據(jù) 同時(shí)某個(gè)字段不重復(fù) 并且排序
首先做一下查詢某個(gè)字段不重復(fù)(使用group?by);
select?*?from 表名 where group?by 不重復(fù)的字段名;
在做一下排序,我之前有發(fā)過一次排序,這次就做一個(gè)簡單排序
order?by 字段a=0?desc,?字段a desc,字段b desc (a字段等于0在最前面,a字段除了0之外的都為倒敘,b字段倒敘);
這樣組合起來就好了
select?*?from 表名 where group?by 不重復(fù)的字段名 order?by 字段a=0?desc,?字段a?desc,字段b?desc;
問題原因:
數(shù)據(jù)表中設(shè)置了主鍵(testers),而主鍵對應(yīng)的值是不允許重復(fù)的。
錯(cuò)誤提示為:你插入的記錄與數(shù)據(jù)表中原有記錄的主鍵重復(fù)了(Duplicate)。所以插入失敗。
注意:檢查表中屬性的字段,在添加記錄時(shí)是否添加了重復(fù)值。
解決方案:
把testers設(shè)置非主鍵,`testers` varchar(10) DEFAULT NULL COMMENT '測試人員',