MySQL 里面rownum_MySQL中的ROWNUM的实现
本文转自
非常感谢!!!
MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数。但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能。
下面介绍几种具体的实现方法.
建立实验环境如下
mysql> create table tbl (
-> id int primary key,
-> col int
-> );
Query OK, 0 rows affected (0.08 sec)
mysql> insert into tbl values
-> (1,26),
-> (2,46),
-> (3,35),
-> (4,68),
-> (5,93),
-> (6,92);
Query OK, 6 rows affected (0.05 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql>
mysql> select * from tbl order by col;
+----+------+
| id | col |
+----+------+
| 1 | 26 |
| 3 | 35 |
| 2 | 46 |
| 4 | 68 |
| 6 | 92 |
| 5 | 93 |
+----+------+
6 rows in set (0.00 sec)
1. 直接在程序中实现;
这应该算是效率最高的一种,也极为方便。直接在你的开发程序中(PHP/ASP/C/...)等中,直接初始化一个变量nRowNum=0,然后在while 记录集时,nRowNum++; 然后输出即可。
2. 使用MySQL变量;在某些情况下,无法通过修改程序来实现时,可以考虑这种方法。
缺点,@x 变量是 connection 级的,再次查询的时候需要初始化。一般来说PHP等B/S应用没有这个问题。但C/S如果connection一只保持则要考虑 set @x=0
mysql> select @x:=ifnull(@x,0)+1 as rownum,id,col
-> from tbl
-> order by col;
+--------+----+------+
| rownum | id | col |
+--------+----+------+
| 1 | 1 | 26 |
| 1 | 3 | 35 |
| 1 | 2 | 46 |
| 1 | 4 | 68 |
| 1 | 6 | 92 |
| 1 | 5 | 93 |
+--------+----+------+
6 rows in set (0.00 sec)
3. 使用联接查询(笛卡尔积)
缺点,显然效率会差一些。
利用表的自联接,代码如下,你可以直接试一下 select a.*,b.* from tbl a,tbl b where a.col>=b.col 以理解这个方法原理。
mysql> select a.id,a.col,count(*) as rownum
-> from tbl a,tbl b
-> where a.col>=b.col
-> group by a.id,a.col;
+----+------+--------+
| id | col | rownum |
+----+------+--------+
| 1 | 26 | 1 |
| 2 | 46 | 3 |
| 3 | 35 | 2 |
| 4 | 68 | 4 |
| 5 | 93 | 6 |
| 6 | 92 | 5 |
+----+------+--------+
6 rows in set (0.00 sec)
4. 子查询
缺点,和联接查询一样,具体的效率要看索引的配置和MySQL的优化结果。
mysql> select a.*,
-> (select count(*) from tbl where col<=a.col) as rownum
-> from tbl a;
+----+------+--------+
| id | col | rownum |
+----+------+--------+
| 1 | 26 | 1 |
| 2 | 46 | 3 |
| 3 | 35 | 2 |
| 4 | 68 | 4 |
| 5 | 93 | 6 |
| 6 | 92 | 5 |
+----+------+--------+
6 rows in set (0.06 sec)
做为一款开源的数据库系统,MySQL无疑是一个不做的产品。它的更新速度,文档维护都不逊于几大商业数据库产品。估计在下一个版本中,我们可以看到由MySQL自身实现的ROWNUM。
分享到:
2010-01-26 13:43
浏览 1048
分类:数据库
评论
MySQL 里面rownum_MySQL中的ROWNUM的实现相关推荐
- mysql取rownum_MySQL中的ROWNUM的实现
MySQL中的ROWNUM的实现 MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数.但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能. ...
- mysql 实现rownum_MySQL 中实现 rownum
在oracle中,可使用rownum处理很多与行号相关的问题,但是mysql中没有类似的函数.本文将介绍mysql中实现行号的方法 [email protected]_name,其中变量名var_na ...
- mysql 查询rownum_mysql中实现rownum功能
MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数.但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能. 下面介绍几种具体的实现方法. 建 ...
- Mysql编辑工具中使用(Navicat查询结果显示行号)
Mysql编辑工具中使用(Navicat查询结果显示行号) select @rownum:=@rownum+1 as rownum,a.roleId from base_userroles a,(se ...
- 【软件测试】Oracle中的rownum用法
一.对rownum的说明 查看全文 http://www.taodudu.cc/news/show-3538609.html 相关文章: Oracle rownum 用法 Oracle rownum ...
- MySQL 5.6中如何定位DDL被阻塞的问题
在上一篇文章<MySQL 5.7中如何定位DDL被阻塞的问题>中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata ...
- mysql 执行cmd,mysql命令行中执行sql的几种方式总结
1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...
- mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结
本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...
- mysql修改表中某个字段的默认值
Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或 ...
最新文章
- 第四周项目三-随机数函数应用于游戏(小学生算术能力测试系统)
- 04737 c++ 自学考试2019版 第二章课后程序设计题 2
- Mybatis的动态拼接条件
- Colorful SegmentedControl
- Linux常用终端命令及扩展(五)
- linux命令提示符详解
- 大数据模型-银行客户细分与个人客户流失预警
- WiFi Tethering Usb Tethering
- B站哔哩哔哩:11 月 22 日上午九时正起恢复在香港联交所买卖
- matlab2018a课后答案,[2018年最新整理]matlab习题及答案.doc
- 服务器就是一台性能好的电脑吗,科普:什么是服务器? 服务器与普通电脑有何区别?...
- 台式机怎样连接连接蓝牙耳机?搜索不到蓝牙耳机?
- 陀螺年度好文回顾|区块链跨链互操性的意义和应用案例
- android 游戏sdk嫁接方式
- CSS:CSS概述与引用
- 心率变异性 matlab,心率变异性好的功率谱分析方面的问题
- 卷积层数量过多的缺点,卷积积分的被积函数
- linux yum install -y提示“没有可用软件包 sl。 错误:无须任何处理”
- Qtcreator常用的快捷键
- P4363 [九省联考2018]一双木棋