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查詢緩存變量的相關解釋