新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 数据库 > 百科

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

时间:2019-06-10 10:40:43  来源:  作者:

朋友们,我们在使用数据库的过程中,偶尔会犯一些低级错误。比如我们创建的某一张表,插入了两条一模一样的数据,想要删除其中一条怎么办?

这是笔者在头条问答中看到的一个问题,并做了回答。感觉这个问题挺有意思,看似简单的问题,我自己也曾经犯过这样的错误,我下面就以SQLServer为例,提一种处理方法供大家参考。

一张表出现多条一模一样的数据?

很多朋友可能会觉得奇怪,一张表里面怎么可能出现多条一模一样的数据呢?是的,正常情况这种情况是不应该发生的,因为我们创建的表基本都会有主键,想要一模一样是基本不可能的。

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

但每个人对数据库的掌握程度和应用场景不同,有时候可能创建了一张表(如上图),阴差阳错的没有设置主键,再阴差阳错的插入了两条或多条一模一样的数据,悲剧就这样产生了。

重复数据是无法直接删除的!

插进去容易,想要干掉却就难喽!如果您在MSSMS中想要删除这条记录,首先要打开表内容行列表,在某一行上单击鼠标右键执行删除菜单,如下图所示:

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

您满心欢喜的以为就这样搞定了,开心早了!您可能想不到的是,MSSMS提示您:完全一致的数据无法删除!如下图所示:

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

想写个SQL删除脚本来删除吗?

delete test where ...

可您where后面的条件怎么写,不写条件,两条就被一起干掉了哦,写条件,两条一模一样,您怎么写?

问题到这儿,感觉有点无解了!其实不用担心,方法还是有的。

为表结构增加一个自增字段

方法当然有很多,我推荐一个我自己用过的方法,那就是为表结构增加一个自增的int字段,通过这个字段将数据变成非完全一致,如下图所示:

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

我们增加了一个FID字段,设置为自增字段,表结构更改后,该字段会被自动赋值,从1开始递增。我们回头再看看修改表结构之后的数据内容:

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

没错,两条原本一模一样的数据,因为有了自增字段,终于变的不一样了。怎么删除,我相信绝大部分朋友就有大把的方法了,比如在MSSMS中选中行直接删除掉,还可以些删除的SQL脚本:

delete test where fid=2
SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

前面无法写脚本,是因为where后面的条件无从下手,现在有了唯一区分的字段就不一样了。

将数据表结构还原

表结构如何还原到原来的样子呢?很简单,进入表结构设计窗口,把前面新增的字段删除就行了,当然,您也可以写个删除字段的SQL脚本。删除后,看上去您似乎什么都没做,但冗余的数据却被您删除了,参看下图:

SQL小技巧:一张表中存在两行完全一致的数据,如何删除?

 

忙活了半天,终于把重复数据删除了,您是庆幸自己把这活干完了、还是想着如何反省自己不要再犯这类错误呢?

杜绝此类问题的根本方法

杜绝此类问题的根本方法,就是创建表时,所有的表都要设置主键、设置主键、设置主键,重要的问题说三遍!没有主键的表,想想都是可怕的,不仅可能造成数据重复,而且查询效率极低。

当然,如果您忘了设置主键、不小心造成了数据完全一致无法删除,试试我前面的方法也未尝不可。
 



Tags:SQL   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
SQL注入就是攻击者在前端的表单输入中,或者 API 的传参时,按照 SQL 的语法,人为地加入一段代码,改变原有的SQL 逻辑,来跳过验证,篡改或者删除数据库,达到攻击者的目的的过程。SQL注...【详细内容】
2019-11-27   SQL  点击:(0)  评论:(0)  加入收藏
最近一直在使用SQLServer数据库,里面的查询等操作与MySQL有所不同,所以还是需要多花点时间学习,今天Leader在我这里指导工作,现场纯熟地操作了一番数据库,着实让我佩服,简单记录一...【详细内容】
2019-11-27   SQL  点击:(1)  评论:(0)  加入收藏
本文记录的是在CentOS 7下安装与配置jdk-8u162的过程。一、下载jdk-8u162版本链接地址:官方地址二、上传jdk到centos下三、检查当前linux系统上是否有jdk,linux命令:rpm -qa |...【详细内容】
2019-11-27   SQL  点击:(0)  评论:(0)  加入收藏
1、MyCAT基础架构准备MyCAT基础架构图 摘自oldguo1.1 MyCAT基础架构准备1.1.1 环境准备:两台虚拟机 db01(10.0.0.51) db02(10.0.0.52) 每台创建四个mysql实例:3307 3308 3309 33...【详细内容】
2019-11-26   SQL  点击:(2)  评论:(0)  加入收藏
MySQL中7个查询命令的优先级:FROM --> WHERE --> GROUP BY --> HAVING -->SELECT --> ORDER BY --> LIMIT==============================================================...【详细内容】
2019-11-26   SQL  点击:(2)  评论:(0)  加入收藏
欢迎关注头条号:Java小野猫实践中如何优化MySQL实践中,MySQL的优化主要涉及SQL语句及索引的优化、数据表结构的优化、系统配置的优化和硬件的优化四个方面,如下图所示: SQL语...【详细内容】
2019-11-26   SQL  点击:(3)  评论:(0)  加入收藏
1.拉取CentOS镜像由于CentOS7在Docker上有一个DBUS(进程间通信机制)的BUG,所以这里建议下载CentOS6的镜像。只需在镜像名后面加上TAG既可docker pull imagine10255/centos6-l...【详细内容】
2019-11-26   SQL  点击:(3)  评论:(0)  加入收藏
概述这篇文章主要针对刚入门的开发,一般半个小时是可以学完的,当然要理解的话估计不止30分钟,对于初学者来说只需满足自己需求可以增删改查等简易的维护即可。下面介绍下MySQL...【详细内容】
2019-11-26   SQL  点击:(2)  评论:(0)  加入收藏
phpMyAdmin工具在导入WordPress的MySQL数据库时报错了,吓死宝宝了,还以为压缩文件名必须以 .[格式].[压缩方式]结尾。如:.sql.zip压缩格式的问题呢,百度搜索一番后发现是由于...【详细内容】
2019-11-26   SQL  点击:(1)  评论:(0)  加入收藏
1 复制概述Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,...【详细内容】
2019-11-25   SQL  点击:(1)  评论:(0)  加入收藏
-视图:view--概念:是数据库中的虚拟表,直接你属于数据库中,由多张表中的数据组合而成--语法:/*create view 视图名称assql语句...........*/ /*--优点:视图可以让用户或者程...【详细内容】
2019-11-22   SQL  点击:(3)  评论:(0)  加入收藏
修改MySQL最大连接数有两个方法。一个是直接在命令行中修改,另一个是配置文件第一种:命令行修改。mysql -uroot -pmysql>show variables like 'max_connections';(查...【详细内容】
2019-11-21   SQL  点击:(3)  评论:(0)  加入收藏
老张我在刚开始学习数据库的时候,没少走弯路。经常会遇到各种稀奇古怪的 error 信息,遇到报错会很慌张,急需一个解决问题的办法。跟无头苍蝇一样,会不加思索地把错误粘到百度上,希望赶紧查找一下有没有好的处理问题的方法...【详细内容】
2019-11-21   SQL  点击:(2)  评论:(0)  加入收藏
[client]#默认连接端口                port = 3306#用于本地连接的socket套接字,一般linux下有用socket = /data/mysqldata/3306/mysql.sock#客户端编码de...【详细内容】
2019-11-20   SQL  点击:(5)  评论:(0)  加入收藏
1、 sqlmap介绍sqlmap是一款支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏...【详细内容】
2019-11-20   SQL  点击:(4)  评论:(0)  加入收藏
这篇文章主要是认识一下mysql中的变量,本来是不准备整理的,但是发现后面的存储过程等等在实际用的时候还挺多。mysql里面的变量你可以和java中的变量进行对比理解。主要分为两...【详细内容】
2019-11-20   SQL  点击:(3)  评论:(0)  加入收藏
这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理。只要是稍微有一点计算机的相关知识相信都能看明白。一、笼统的逻辑架构先给出一张逻辑架构图,这张图是让你从...【详细内容】
2019-11-20   SQL  点击:(4)  评论:(0)  加入收藏
概述文章有点长哟,需要耐心看哟数据库系统是现代商业世界有序稳定运行的基石,数据和数据承载的交易事件的结果不会因系统故障而损伤。数据库系统的核心技术是事务处理机制,也是...【详细内容】
2019-11-20   SQL  点击:(1)  评论:(0)  加入收藏
概述今天主要介绍一下mysql 中 时间函数now() current_timestamp() 和 sysdate() 以及三者之间的比较。now()、current_timestamp() 和 sysdate()在mysql中有三个时间函数用...【详细内容】
2019-11-19   SQL  点击:(2)  评论:(0)  加入收藏
1 初识索引索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发...【详细内容】
2019-11-18   SQL  点击:(6)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条