数据库教程:MySQL数据库中删除重复记录的方法总结[推荐]分享

表结构:
mysql>descdemo;
+——-+——————+——+—–+———+—————-+
|Field|Type|Null|Key|Default|Extra|
+——-+——————+——+—–+———+—————-+
|id|int(11)unsigned|NO|PRI|NULL|auto_increment|
|site|varchar(100)|NO|MUL|||
+——-+——————+——+—–+———+—————-+
2rowsinset(0.00sec)

数据:
mysql>select*fromdemoorderbyid;
+—-+————————+
|id|site|
+—-+————————+
|1|https://www.CodeBit.cn|
|2|https://YITU.org|
|3|https://www.ShuoWen.org|
|4|https://www.CodeBit.cn|
|5|https://www.ShuoWen.org|
+—-+————————+
5rowsinset(0.00sec)

当没有创建表或创建索引权限的时候,可以用下面的方法:

如果你要删除较旧的重复记录,可以使用下面的语句:
mysql>deletefroma
->usingdemoasa,demoasb
->where(a.id>b.id)
->and(a.site=b.site);
QueryOK,2rowsaffected(0.12sec)
mysql>select*fromdemoorderbyid;
+—-+————————+
|id|site|
+—-+————————+
|1|https://www.CodeBit.cn|
|2|https://YITU.org|
|3|https://www.ShuoWen.org|
+—-+————————+
3rowsinset(0.00sec)

如果你要删除较新的重复记录,可以使用下面的语句:
mysql>deletefroma
->usingdemoasa,demoasb
->where(a.id<b.id)
->and(a.site=b.site);
QueryOK,2rowsaffected(0.12sec)
mysql>select*fromdemoorderbyid;
+—-+————————+
|id|site|
+—-+————————+
|2|https://YITU.org|
|4|https://www.CodeBit.cn|
|5|https://www.ShuoWen.org|
+—-+————————+
3rowsinset(0.00sec)

你可以用下面的语句先确认将被删除的重复记录:
mysql>SELECTa.*
->FROMdemoa,demob
->WHEREa.id>b.id
->AND(a.site=b.site);
+—-+————————+
|id|site|
+—-+————————+
|1|https://www.CodeBit.cn|
|3|https://www.ShuoWen.org|
+—-+————————+
2rowsinset(0.00sec)

如果有创建索引的权限,可以用下面的方法:

在表上创建唯一键索引:

mysql>alterignoretabledemoadduniqueindexukey(site); QueryOK,5rowsaffected(0.46sec) Records:5Duplicates:2Warnings:0 mysql>select*fromdemoorderbyid; +—-+————————+ |id|site| +—-+————————+ |1|https://www.CodeBit.cn| |2|https://YITU.org| |3|https://www.ShuoWen.org| +—-+————————+ 3rowsinset(0.00sec)

重复记录被删除后,如果需要,可以删除索引:

mysql>altertabledemodropindexukey; QueryOK,3rowsaffected(0.37sec) Records:3Duplicates:0Warnings:0 如果有创建表的权限,可以用下面的方法:

创建一个新表,然后将原表中不重复的数据插入新表:

mysql>createtabledemo_newasselect*fromdemogroupbysite; QueryOK,3rowsaffected(0.19sec) Records:3Duplicates:0Warnings:0 mysql>showtables; +—————-+ |Tables_in_test| +—————-+ |demo| |demo_new| +—————-+ 2rowsinset(0.00sec) mysql>select*fromdemoorderbyid; +—-+————————+ |id|site| +—-+————————+ |1|https://www.CodeBit.cn| |2|https://YITU.org| |3|https://www.ShuoWen.org| |4|https://www.CodeBit.cn| |5|https://www.ShuoWen.org| +—-+————————+ 5rowsinset(0.00sec) mysql>select*fromdemo_neworderbyid; +—-+————————+ |id|site| +—-+————————+ |1|https://www.CodeBit.cn| |2|https://YITU.org| |3|https://www.ShuoWen.org| +—-+————————+ 3rowsinset(0.00sec)

然后将原表备份,将新表重命名为当前表:

mysql>renametabledemotodemo_old,demo_newtodemo; QueryOK,0rowsaffected(0.04sec) mysql>showtables; +—————-+ |Tables_in_test| +—————-+ |demo| |demo_old| +—————-+ 2rowsinset(0.00sec) mysql>select*fromdemoorderbyid; +—-+————————+ |id|site| +—-+————————+ |1|https://www.CodeBit.cn| |2|https://YITU.org| |3|https://www.ShuoWen.org| +—-+————————+ 3rowsinset(0.00sec)

注意:使用这种方式创建的表会丢失原表的索引信息!

mysql>descdemo; +——-+——————+——+—–+———+——-+ |Field|Type|Null|Key|Default|Extra| +——-+——————+——+—–+———+——-+ |id|int(11)unsigned|NO||0|| |site|varchar(100)|NO|||| +——-+——————+——+—–+———+——-+ 2rowsinset(0.00sec)

如果要保持和原表信息一致,你可以使用showcreatetabledemo;来查看原表的创建语句,然后使用原表的创建语句创建新表,接着使用insert…select语句插入数据,再重命名表即可。

当然,如果要避免重复记录,最好的办法还是不要插入重复数据,可以参考本站另外一篇文章:MySQL当记录不存在时插入

您可能感兴趣的文章:mysql数据表中查找重复记录mysql查找删除重复数据并只保留一条实例详解mysql查询表里的重复数据方法MySQL删除数据库中重复数据方法小结很全面的MySQL处理重复数据代码分享MYSQL插入数据时忽略重复数据的方法MySQL使用UNIQUE实现数据不重复插入Yii+MYSQL锁表防止并发情况下重复数据的方法删除MySQL重复数据的方法MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)

标签: 数据库 数据 方法 SQL

mysql部分替换sql语句分享

常用的SQL例句 数据库开发所需知识

上述就是数据库技术:MySQL数据库中删除重复记录的方法总结分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/910322.html

(0)
上一篇 2021年10月24日
下一篇 2021年10月24日

精彩推荐