mysql cursor 游標


以下說明基於mysql 5.5。

 

概述:我知道大部分人對於mysql游標使用的不多。mysql大多數情況可以用“集合”操作,即可滿足90%的需求。mysql cursor作為對“記錄”操作,是操作數據的一種補充。

 

mysql cursor三大特性(大三“坑”):

1、只讀的:cursor本身不提供修改數據的操作,只能fetch columns into variables。(當然你可以把數據拿出來以后,再用update語句更新。但是有坑,第三點說明)。

2、不能滾動的:只能向一個方向遍歷數據,不能回滾,不能隨意進退,不能跳過某些記錄。

3、數據敏感的(大坑):游標分為兩類,一類為數據敏感類型的游標,一類為非數據敏感類型的游標

  • 數據敏感類型游標:游標指向實際的數據,遍歷數據時,如果其他session修改了當前cursor遍歷的數據集合,會影響當前游標的行為。
  • 非數據敏感類型游標:游標查詢的數據集合放入到一個臨時表中,游標指向臨時表的記錄集合。
  • mysql cursor: 是數據敏感類型游標。官方英文說明:The server may or may not make a copy of its result table.
  • 基於以上說明: 不要更新mysql游標打開表的數據。(也有部分資料說:不要更新游標聲明語句中select statement的where條件字段)

 

mysql cursor無關緊要的特性:

1、游標只能在存儲過程中使用,包含在BEGIN ... END statement中。

2、需要close cursor關閉游標,釋放資源。其實如果不釋放,在END statement結束以后,自動釋放cursor。

3、游標的聲明語句必須放在所有變量的聲明語句之后。

4、游標的聲明語句必須關聯select statement。

5、定義一個CONTINUE HANDLER FOR NOT FOUND,可以幫助游標在fetch no data的時候,跳出fetch循環。

6、CONTINUE HANDLER FOR NOT FOUND 這個條件不僅僅針對游標沒有找到數據會觸發,針對其他select statement(在沒有檢索到數據的情況下)也會觸發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM