这张表有20w行数据,其中第8w条 - 15w条是多余的,也不能重新导,因为可能其他公司的同事已经在处理了,这时该怎么删除多余数据呢?
为了不被领导邀请爬山,他找到我求救。
小刘:“哈哥,救命救命,这MySQL没有自增主键,我咋删除第[8w,15w]的数据啊?”
陈哈哈:“啊?MySQL又没有rowNum,那咋搞啊?我不会,不会~”
小刘:“一顿串儿!哈哥快来”
陈哈哈:“哎呀,我这活儿急得一匹,下午再说吧。”
小刘:“今儿晚上,望京小腰,不请我是你儿子!”
陈哈哈:“什么串儿串儿的,都是兄弟,说的就跟我怕你吹牛B不请似的,来吧来吧,一起看看咋处理。”
小刘:“……”
其实,在MySQL中确实没有rownum伪列,但我们可以自己写函数定义。线上数据不方便,下面我拿一些测试数据来举例吧(15条),如下
mysql> select * from t_student;
±-----------±----±----±------±---------±----------+
| NAME | SEX | AGE | CLASS | GRADE | HOBBY |
±-----------±----±----±------±---------±----------+
| 陈哈哈 | 男 | 15 | 18班 | 9年级1 | 上网 |
| 扈亚鹏 | 男 | 15 | 18班 | 9年级1 | 美食 |
| 徐立楠 | 女 | 14 | 18班 | 9年级1 | 阅读 |
| 陈子凝 | 女 | 15 | 18班 | 9年级1 | 看电影 |
| 刘晓莉 | 女 | 14 | 18班 | 9年级1 | 金希澈 |
| 陈哈哈1 | 男 | 15 | 18班 | 9年级2 | 上网 |
| 扈亚鹏1 | 男 | 15 | 18班 | 9年级2 | 美食 |
| 徐立楠1 | 女 | 14 | 18班 | 9年级2 | 阅读 |
| 陈子凝1 | 女 | 15 | 18班 | 9年级2 | 看电影 |
| 刘晓莉1 | 女 | 14 | 18班 | 9年级1 | 金希澈 |
| 陈哈哈2 | 男 | 15 | 18班 | 9年级2 | 上网 |
| 扈亚鹏2 | 男 | 15 | 18班 | 9年级2 | 美食 |
| 徐立楠2 | 女 | 14 | 18班 | 9年级2 | 阅读 |
| 陈子凝2 | 女 | 15 | 18班 | 9年级2 | 看电影 |
| 刘晓莉2 | 女 | 14 | 18班 | 9年级1 | 金希澈 |
±-----------±----±----±------±---------±----------+
15 rows in set (0.00 sec)
如何查询这些的数据的行值呢?SQL如下:
– 在没自增主键情况下,查询数据行(rownum),行号
select @rownum:=@rownum+1 AS rownum,NAME
,SEX
,CLASS
,GRADE
from t_student ,(SELECT @rownum:=0) r;
查询结果如下:
mysql> select @rownum:=@rownum+1 AS rownum,NAME
,SEX
,CLASS
,GRADE
from t_student ,(SELECT @rownum:=0) r;
±-------±-----------±----±------±---------+
| rownum | NAME | SEX | CLASS | GRADE |
±-------±-----------±----±------±---------+
| 1 | 陈哈哈 | 男 | 18班 | 9年级1 |
| 2 | 扈亚鹏 | 男 | 18班 | 9年级1 |
| 3 | 徐立楠 | 女 | 18班 | 9年级1 |
| 4 | 陈子凝 | 女 | 18班 | 9年级1 |
| 5 | 刘晓莉 | 女 | 18班 | 9年级1 |
| 6 | 陈哈哈1 | 男 | 18班 | 9年级2 |
| 7 | 扈亚鹏1 | 男 | 18班 | 9年级2 |
| 8 | 徐立楠1 | 女 | 18班 | 9年级2 |
| 9 | 陈子凝1 | 女 | 18班 | 9年级2 |
| 10 | 刘晓莉1 | 女 | 18班 | 9年级1 |
| 11 | 陈哈哈2 | 男 | 18班 | 9年级2 |
| 12 | 扈亚鹏2 | 男 | 18班 | 9年级2 |
| 13 | 徐立楠2 | 女 | 18班 | 9年级2 |
| 14 | 陈子凝2 | 女 | 18班 | 9年级2 |
| 15 | 刘晓莉2 | 女 | 18班 | 9年级1 |
±-------±-----------±----±------±---------+
15 rows in set (0.00 sec)
可以看到查询到的行号,那我该怎么通过上面查到的rownum行来进行删除呢?其实这个想法是行不通的,因为上面的rownum就是一个展示值,是没有其他实际效果的。
但是,我可以通过找到表中的唯一列(如UUID、MD5、包名、身份证ID),通过范围条件查询rownum,从而找到需要删除的唯一键集合,比如在这张表中存在唯一键是“NAME”,那么我通过查到第[6,10]行数据的唯一键“NAME”,从而通过子查询来删除,(这里是把人名后有“1”的删除)。SQL如下:
我们先看一下第[6,10]行数据,SQL如下:
– 查询第6到第10行数据。
SELECT * from (select @rownum:=@rownum+1 AS rownum,NAME
,SEX
,CLASS
,GRADE
from
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
写在最后
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里
实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里
[外链图片转存中…(img-vTRVlpLr-1711777871531)]
[外链图片转存中…(img-ca8ZKL0H-1711777871531)]
[外链图片转存中…(img-CnlH0utw-1711777871532)]