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)