国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL rownumber SQL生成自增長序號

2024-07-24 12:39:17
字體:
來源:轉載
供稿:網友

MySQL 幾乎模擬了 Oracle,SQL Server等商業數據庫的大部分功能,函數,但很可惜,到目前的版本(5.1.33)為止,仍沒有實現ROWNUM這個功能.

下面介紹幾種具體的實現方法.建立實驗環境如下:

  1. mysql> create table tbl ( 
  2.     ->  id      int primary key
  3.     ->  col     int 
  4.     -> ); 
  5. Query OK, 0 rows affected (0.08 sec) 
  6.  
  7. mysql> insert into tbl values 
  8.     -> (1,26), 
  9.     -> (2,46), 
  10.     -> (3,35), 
  11.     -> (4,68), 
  12.     -> (5,93), 
  13.     -> (6,92); 
  14. Query OK, 6 rows affected (0.05 sec) 
  15. Records: 6  Duplicates: 0  Warnings: 0 
  16.  
  17. mysql> 
  18. mysql> select * from tbl order by col; 
  19. +----+------+ 
  20. | id | col  | 
  21. +----+------+ 
  22. |  1 |   26 | 
  23. |  3 |   35 | 
  24. |  2 |   46 | 
  25. |  4 |   68 | 
  26. |  6 |   92 | 
  27. |  5 |   93 | 
  28. +----+------+ 
  29. 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,代碼如下:

  1. mysql> select @x:=ifnull(@x,0)+1 as rownum,id,col 
  2.     -> from tbl 
  3.     -> order by col; 
  4. +--------+----+------+ 
  5. | rownum | id | col  | 
  6. +--------+----+------+ 
  7. |      1 |  1 |   26 | 
  8. |      1 |  3 |   35 | 
  9. |      1 |  2 |   46 | 
  10. |      1 |  4 |   68 | 
  11. |      1 |  6 |   92 | 
  12. |      1 |  5 |   93 | 
  13. +--------+----+------+ 
  14. rows in set (0.00 sec) 

3.使用聯接查詢,笛卡爾積.

缺點,顯然效率會差一些,利用表的自聯接,代碼如下,你可以直接試一下 select a.*,b.* from tbl a,tbl b where a.col>=b.col 以理解這個方法原理,代碼如下:

  1. mysql> select a.id,a.col,count(*) as rownum 
  2.     -> from tbl a,tbl b 
  3.     -> where a.col>=b.col 
  4.     -> group by a.id,a.col; 
  5. +----+------+--------+ 
  6. | id | col  | rownum | 
  7. +----+------+--------+ 
  8. |  1 |   26 |      1 | 
  9. |  2 |   46 |      3 | 
  10. |  3 |   35 |      2 | 
  11. |  4 |   68 |      4 | 
  12. |  5 |   93 |      6 | 
  13. |  6 |   92 |      5 | 
  14. +----+------+--------+ 
  15. rows in set (0.00 sec) 

4.子查詢

缺點:和聯接查詢一樣,具體的效率要看索引的配置和MySQL的優化結果,代碼如下:

  1. mysql> select a.*, 
  2.     ->  (select count(*) from tbl where col<=a.col) as rownum 
  3.     -> from tbl a;  --Vevb.com 
  4. +----+------+--------+ 
  5. | id | col  | rownum | 
  6. +----+------+--------+ 
  7. |  1 |   26 |      1 | 
  8. |  2 |   46 |      3 | 
  9. |  3 |   35 |      2 | 
  10. |  4 |   68 |      4 | 
  11. |  5 |   93 |      6 | 
  12. |  6 |   92 |      5 | 
  13. +----+------+--------+ 
  14. rows in set (0.06 sec)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元阳县| 台江县| 大同市| 焉耆| 长治市| 普格县| 洛南县| 林州市| 平潭县| 合江县| 廊坊市| 进贤县| 宁德市| 壤塘县| 瑞金市| 响水县| 美姑县| 时尚| 旬邑县| 丹凤县| 华亭县| 靖安县| 余姚市| 舟曲县| 平泉县| 长海县| 那曲县| 洪江市| 平江县| 长乐市| 合山市| 林芝县| 宜城市| 三亚市| 温州市| 灵石县| 汉源县| 南康市| 灵丘县| 青铜峡市| 铜梁县|