MySQL没有RowNum,那我该怎么按“行”查询或删除数据,rabbitmq入门到精通pdf下载

本文介绍了在MySQL中如何在没有ROWNUM的情况下,通过设置变量模拟行号进行数据查询和删除操作。示例展示了如何查询和删除包含特定字符的数据行,强调了ROWNUM在MySQL中的特殊性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

| 刘晓莉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

t_student ,(SELECT @rownum:=0) r) t where t.rownum between 6 and 10;

返回结果:

mysql> SELECT * from (select @rownum:=@rownum+1 AS rownum,NAME,SEX,CLASS,GRADE from t_student ,(SELECT @rownum:=0) r) t

-> where t.rownum between 6 and 10;

±-------±-----------±----±------±---------+

| rownum | NAME | SEX | CLASS | GRADE |

±-------±-----------±----±------±---------+

| 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 |

±-------±-----------±----±------±---------+

5 rows in set (0.00 sec)

下面我们来删除掉`NAME`中包含"1"的数据,也就是第6到第10行。

– 以行为条件删除数据

DELETE from t_student where NAME in (SELECT NAME from

(select @rownum:=@rownum+1 AS rownum,NAME,SEX,CLASS,GRADE from t_student ,(SELECT @rownum:=0) r) t

where t.rownum between 6 and 10);

mysql> DELETE from t_student where NAME in (SELECT NAME from (select @rownum:=@rownum+1 AS rownum,NAME,SEX,CLASS,GRADE from t_student ,(SELECT @rownum:=0) r) t where t.rownum between 6 and 10);

Query OK, 5 rows affected (0.07 sec)

再次查询,NAME中包含“1”的那5行数据已经被成功删除。

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 | 陈哈哈2 | 男 | 18班 | 9年级2 |

| 7 | 扈亚鹏2 | 男 | 18班 | 9年级2 |

| 8 | 徐立楠2 | 女 | 18班 | 9年级2 |

| 9 | 陈子凝2 | 女 | 18班 | 9年级2 |

| 10 | 刘晓莉2 | 女 | 18班 | 9年级1 |

±-------±-----------±----±------±---------+

10 rows in set (0.00 sec)

好了,本篇文章就到这里,希望能在你需要的时候帮助到你。

一张令人心酸的图片(一)

================

这是

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

开源分享完整内容戳这里

我一个喜欢上网的朋友拍到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值