MYSQL入門學習之十四:游標的基本操作 相關鏈接: MYSQL入門學習之一:基本操作 http://www.BkJia.com/database/201212/173868.html MYSQL入門學習之二:使用正則表達式搜索 http://www.BkJia.com/database/201212/173869.html MYSQL入門學習之三:全文本搜索 http://www.BkJia.com/database/201212/173873.html MYSQL入門學習之四:MYSQL的數據類型 http://www.BkJia.com/database/201212/175536.html MYSQL入門學習之五:MYSQL的字符集 http://www.BkJia.com/database/201212/175541.html MYSQL入門學習之六:MYSQL的運算符 http://www.BkJia.com/database/201212/175862.html MYSQL入門學習之七:MYSQL常用函數 http://www.BkJia.com/database/201212/175864.html MYSQL入門學習之八:數據庫及表的基本操作 http://www.BkJia.com/database/201212/175867.html MYSQL入門學習之九:索引的簡單操作 http://www.BkJia.com/database/201212/176772.html MYSQL入門學習之十:視圖的基本操作 http://www.BkJia.com/database/201212/176775.html MYSQL入門學習之十一:觸發器的基本操作 http://www.BkJia.com/database/201212/176781.html MYSQL入門學習之十二:存儲過程的基本操作 http://www.BkJia.com/database/201212/177380.html MYSQL入門學習之十三:自定義函數的基本操作 http://www.BkJia.com/database/201212/177382.html 游標(CURSOR)是一個存儲在MySQL服務器上的數據庫查詢,它不是一條SELECT語句,而是被該語句檢索出來的結果集。在存儲了游標之後,應用程序可以根據需要滾動或浏覽其中的數據。 www.2cto.com 游標主要用於交互式應用,其中用戶需要滾動屏幕上的數據,並對數據進行浏覽或做出更改。 使用游標需要MySQL5及以上版本支持。 一、使用游標的步驟 在能夠使用游標前,必須聲明(定義)它。 一旦聲明後,必須打開游標以供使用。 對於填有數據的游標,根據需要取出(檢索)各行。 在結束游標使用時,必須關閉游標。 二、游標的基本操作 1、創建游標 DECLARE cur_name CURSOR FOR SELECT ****; 示例: [sql] mysql> delimiter // mysql> create procedure test_cur() -> begin -> declare mycur cursor -> for -> select userid,username from newname; -> end; -> // mysql> delimiter ; 2、打開游標 OPEN cur_name; MySQL在處理OPEN語句時執行查詢,存儲檢索出的數據以供浏覽和滾動。 3、關閉游標 CLOSE cur_name; CLOSE語句釋放游標使用的所有內部內存和資源。 在一個游標關閉後,如果沒有重新打開,則不能使用它。但是,使用聲明過的游標不需要再次聲明。 如果不明確關閉游標,MySQL將會在到達END語句時自動關閉它。 示例: [sql] mysql> delimiter // mysql> create procedure test_cur() -> begin -> declare mycur cursor -> for -> select userid,username from newname; -> open mycur; -> close mycur; -> end; -> // mysql> delimiter ; 4、使用游標數據 游標被打開後,可以使用FETCH語句分別訪問它的每一行。 示例: [sql] mysql> delimiter // mysql> create procedure test_cur() -> begin -> declare done boolean default 0; -> declare cur_userid int; -> declare cur_birthday varchar(50); -> -> declare mycur cursor -> for -> select userid,year(birthday) from newname where birthday is not null; -> declare continue handler for sqlstate '02000' set done=1; -> -> open mycur; -> -> repeat -> fetch mycur into cur_userid,cur_birthday; -> select cur_userid,cur_birthday; -> until done end repeat; -> -> close mycur; -> end; -> // mysql> delimiter ; mysql> call test_cur; +------------+--------------+ | cur_userid | cur_birthday | +------------+--------------+ | 19 | 1988 | +------------+--------------+ 1 row in set (0.00 sec) +------------+--------------+ | cur_userid | cur_birthday | +------------+--------------+ | 42 | 2008 | +------------+--------------+ 1 row in set (0.01 sec)