| 刘晓莉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面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
我一个喜欢上网的朋友拍到的。