十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
MySQL查询行号的实现方法不止一种,下面为您介绍的就是使用函数实现MySQL查询行号的方法,如果您对此方面感兴趣的话,不妨一看。

mysql5中使用函数实现MySQL查询行号,原理和使用变量差不多 。
下面MySQL查询行号过程的目的是获得整型包含行的数量的结果集,类似其他DBMS中的ROWNUM()。我们需要一个用户变量来保存在每次调用rno()后的结果,就命名为@rno吧。
- CREATE FUNCTION rno ()
 - RETURNS INT
 - BEGIN
 - SET @rno = @rno + 1;
 - RETURN @rno;
 - END;
 
通过rno()方法的SELECT我们获得了行数。下面是调用程序的结果:
- mysql> SET @rno = 0;//
 - Query OK, 0 rows affected (0.00 sec)
 - mysql> SELECT rno(),s1,s2 FROM t;//
 - +-------+------+------+
 - | rno() | s1 | s2 |
 - +-------+------+------+
 - | 1 | 1 | a |
 - | 2 | 2 | b |
 - | 3 | 3 | c |
 - | 4 | 4 | d |
 - | 5 | 5 | e |
 - +-------+------+------+
 - 5 rows in set (0.00 sec)
 
在SELECT中将@rno置零的技巧是使用了WHERE的求值功能,而这个特性在今后的MySQL中可能丢失。
- CREATE FUNCTION rno_reset ()
 - RETURNS INTEGER
 - BEGIN
 - SET @rno = 0;
 - RETURN 1;
 - END;
 - SELECT rno(),s1,s2 FROM t WHERE rno_reset()=1;//
 
实例如下:
- mysql> use db5
 - Database changed
 - mysql> delimiter //
 - mysql> CREATE FUNCTION rno ()
 - -> RETURNS INT
 - -> BEGIN
 - -> SET @rno = @rno + 1;
 - -> RETURN @rno;
 - -> END;//
 - Query OK, 0 rows affected (0.42 sec)
 - mysql> set @rno = 0;
 - -> //
 - Query OK, 0 rows affected (0.00 sec)
 - mysql> select rno(),s1 from t;//
 - +-------+------+
 - | rno() | s1 |
 - +-------+------+
 - | 1 | 6 |
 - | 2 | 6 |
 - | 3 | 0 |
 - | 4 | 19 |
 - | 5 | 19 |
 - | 6 | 1 |
 - | 7 | 2 |
 - | 8 | 3 |
 - | 9 | 4 |
 - | 10 | 0 |
 - | 11 | 1 |
 - | 12 | 2 |
 - | 13 | 4 |
 - +-------+------+
 - 13 rows in set (0.06 sec)
 - mysql> CREATE FUNCTION rno_reset ()
 - -> RETURNS INTEGER
 - -> BEGIN
 - -> SET @rno = 0;
 - -> RETURN 1;
 - -> END;//
 - Query OK, 0 rows affected (0.01 sec)
 - mysql> select rno(),s1 from t where rno_reset()=1;//
 - +-------+------+
 - | rno() | s1 |
 - +-------+------+
 - | 1 | 6 |
 - | 2 | 6 |
 - | 3 | 0 |
 - | 4 | 19 |
 - | 5 | 19 |
 - | 6 | 1 |
 - | 7 | 2 |
 - | 8 | 3 |
 - | 9 | 4 |
 - | 10 | 0 |
 - | 11 | 1 |
 - | 12 | 2 |
 - | 13 | 4 |
 - +-------+------+
 - 13 rows in set (0.13 sec)
 
【编辑推荐】
MySQL查询中的非空问题
MySQL查询超时问题的解决
教您如何调整MySQL查询缓冲
MySQL查询优化器的工作原理
MySQL查询缓存变量的相关解释