MySQL没有RowNum,那我该怎么按“行,做Java程序员真的没有春天吗

这张表有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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer
实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

[外链图片转存中…(img-vTRVlpLr-1711777871531)]

[外链图片转存中…(img-ca8ZKL0H-1711777871531)]

[外链图片转存中…(img-CnlH0utw-1711777871532)]

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值