本文转自

非常感谢!!!

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的实现相关推荐

  1. mysql取rownum_MySQL中的ROWNUM的实现

    MySQL中的ROWNUM的实现 MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数.但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能. ...

  2. mysql 实现rownum_MySQL 中实现 rownum

    在oracle中,可使用rownum处理很多与行号相关的问题,但是mysql中没有类似的函数.本文将介绍mysql中实现行号的方法 [email protected]_name,其中变量名var_na ...

  3. mysql 查询rownum_mysql中实现rownum功能

    MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数.但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能. 下面介绍几种具体的实现方法. 建 ...

  4. Mysql编辑工具中使用(Navicat查询结果显示行号)

    Mysql编辑工具中使用(Navicat查询结果显示行号) select @rownum:=@rownum+1 as rownum,a.roleId from base_userroles a,(se ...

  5. 【软件测试】Oracle中的rownum用法

    一.对rownum的说明 查看全文 http://www.taodudu.cc/news/show-3538609.html 相关文章: Oracle rownum 用法 Oracle rownum ...

  6. MySQL 5.6中如何定位DDL被阻塞的问题

    在上一篇文章<MySQL 5.7中如何定位DDL被阻塞的问题>中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata ...

  7. mysql 执行cmd,mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

  8. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结

    本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...

  9. mysql修改表中某个字段的默认值

    Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或 ...

最新文章

  1. 第四周项目三-随机数函数应用于游戏(小学生算术能力测试系统)
  2. 04737 c++ 自学考试2019版 第二章课后程序设计题 2
  3. Mybatis的动态拼接条件
  4. Colorful SegmentedControl
  5. Linux常用终端命令及扩展(五)
  6. linux命令提示符详解
  7. 大数据模型-银行客户细分与个人客户流失预警
  8. WiFi Tethering Usb Tethering
  9. B站哔哩哔哩:11 月 22 日上午九时正起恢复在香港联交所买卖
  10. matlab2018a课后答案,[2018年最新整理]matlab习题及答案.doc
  11. 服务器就是一台性能好的电脑吗,科普:什么是服务器? 服务器与普通电脑有何区别?...
  12. 台式机怎样连接连接蓝牙耳机?搜索不到蓝牙耳机?
  13. 陀螺年度好文回顾|区块链跨链互操性的意义和应用案例
  14. android 游戏sdk嫁接方式
  15. CSS:CSS概述与引用
  16. 心率变异性 matlab,心率变异性好的功率谱分析方面的问题
  17. 卷积层数量过多的缺点,卷积积分的被积函数
  18. linux yum install -y提示“没有可用软件包 sl。 错误:无须任何处理”
  19. Qtcreator常用的快捷键
  20. P4363 [九省联考2018]一双木棋

热门文章

  1. 西门子EBR与BATCH通讯方法,mes与batch交互
  2. gis和计算机考研考哪个好,Gis地理信息系统专业可考研的学校
  3. Friendships
  4. 【软考】系统集成项目管理工程师(十三)项目干系人管理
  5. Navicat连接云服务器MySQL数据库(华为云)
  6. Eclipse中全局搜索和更替
  7. switch选择结构
  8. 活动分析,就该这么做!
  9. 家中闲置Android平板做Mac的扩展屏方法
  10. scratch少儿编程航天主题:模拟空间站对接