mysql begin end 用法_MySQL ------ 游标(CURSOR)(二十六)
MySQL執行檢索操作會返回一組稱為結果集的行,這組返回的行都是與SQL 語句相匹配的行(零行或多行),但是,使用簡單的select 語句,沒有辦法得到第一行、下一行、或前十行,也不存在一行地處理所有行簡單方法(也就是成批地處理它們),而有時,需要在檢索出來的行中前進或后退一行或多行,怎么辦來,之前了解的很難實現,那么本節的游標就可實現,,
游標(cursor):一個存儲在mysql服務器上數據庫查詢,它不是一條select 語句,而是被語句檢索出來的結果集。
好處:在存儲了游標之后,應用程序可以根據需要滾動或瀏覽其中的數據。
主要用于:交互式應用,其中用戶需要滾動屏幕上的數據,并對數據進行瀏覽或做出更改。
注意:不像多數DBMS,MySQL游標只能用于存儲過程和函數。
版本:MySQL 5 添加了對游標的支持,要使用的話MySQL版本需要在mysql 5 及以后的版本
one、注意使用游標的主要步驟:
1、在能夠使用游標前,必須聲明(定義)它。這個過程實際上沒有檢索數據,他只是使用select 語句。
2、一旦聲明后,必須打開游標以供使用。這個過程用前面定義的select 語句把數據實際檢索出來
3、對于填有數據游標,根據需要取出(檢索)各行。
4、在結束游標使用時,必須關閉游標
在聲明游標后,可根據需要頻繁地打開和關閉游標。在游標打開后,可根據需要頻繁地執行取操作。
two、創建游標
游標用declare 語句創建。DECLARE 命名游標,并定義相應地select 語句,根據需要帶where 和其他子句。
下面在存儲過程中使用declare 定義一個游標,存儲過程完成后游標也相應消失。
-- declare 游標名稱 cursor for 查詢語句打開和關閉游標
--- OPEN 游標名;在處理open 語句時執行查詢,存儲檢索出地數據以供瀏覽和滾動游標處理后,要關閉游標
--- CLOSE 游標名;close會釋放游標使用的所有內部內存和資源,所有游標使用后都要進行關閉操作
在一個游標關閉后,如果沒有重新打開,則不能使用它。但是使用聲明過的游標不需要再次聲明,使用open 語句打開就行。
如果不明確的關閉游標,mysql 將會在到達end 語句的時候自動關閉它。
上述可以修改為:
mysql上述的存儲過程聲明、打開和關閉一個游標,但對檢索出的數據什么也沒有做
three、使用游標數據 FETCH
在一個游標被打開后,可以使用 fetch 語句分別訪問它的每一行。
fetch 指定檢索什么數據(所需的列),檢索出來的數據存儲在什么地方。還向前移動游標中的內部指針,使下一條fetch語句檢索下一行(避免重復讀取一行)。
-- 從游標中檢索單個行(第一行)fetch 檢索當前行的order_num 列(將自動從第一行開始)買到一個名為onum 的局部變量中,對檢索出的數據不做任何處理。
-- 循環檢索數據,從第一行到最后一行上述使用fetch 檢索當前order_num 到聲明為onum 的變量中,但是 這個fetch 在repeat 內,因此他會反復執行直到done 為真(由nutil done end repeat ;規定)為使它起作用用一個defaut 0 定義變量 done ,那么done 根據以下代碼設置為真
declare continue handler for sqlstate '02000' set done=1;
上述,定義了一個CONTINUE HANDLER(繼續處理程序) ,他是在條件出現時執行的代碼,這里是指當SQLSTATE '02000' 出現時,SET done =1.
SQLSTATE '02000' 是一個未找到條件,當REPEAT 由于沒有更多的行供循環而不能繼續時出現
four、注意:
1、declare 語句的發布存在特定的次序,用戶declare 語句定義的局部變量必須定義任意游標或句柄之前的定義,而句柄必須在游標之后定義,不遵守此順序將產生錯誤信息。
2、如果調用這個存儲過程,他將定義幾個變量和一個continue handler ,定義并打開一個游標,重復讀取所有的行,然后關閉游標。如果一切正常可以在循環內放入任意需要的處理(在fetch 語句之后,循環結束之前)
3、除了repeat 語句外,MySQL 還支持循環語句,它可以用來重復執行代碼,直到使用 LEAVE 語句手動退出為止,通常REPEAT 語句的語法使它更適合于對游標進行循環。
總結
以上是生活随笔為你收集整理的mysql begin end 用法_MySQL ------ 游标(CURSOR)(二十六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux编译框架的搭建,Linux精华
- 下一篇: 透明大页相关内核参数_透明大内存页Hug