校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > MySQL游標概念與用法詳解

MySQL游標概念與用法詳解

熱門標簽:400電話申請廠家現貨 中國地圖標注公司 天津公司外呼系統軟件 百度地圖標注要什么軟件 福建外呼電銷機器人加盟 昌德訊外呼系統 自己做地圖標注需要些什么 電話機器人的價格多少錢一個月 徐涇鎮騰訊地圖標注

本文實例講述了MySQL游標概念與用法。分享給大家供大家參考,具體如下:

1、游標的概念(Cursor)

一條sql,對應N條資源,取出資源的接口,就是游標,沿著游標,可以一次取出1行。如果開發過安卓的同學應該知道有一個Api是Cursor,也是讀取SQLite數據庫用的,和這個有點類似。

2、使用游標的步驟

(1)聲明

使用declare進行聲明

declare 游標名 cursor for select_statement

(2)打開游標

使用open進行打開

open 游標名

(3)從游標中取值

使用fetch進行取值

fetch 游標名 into var1,var2[,...] --將取到的一行賦值給多個變量

(4)關閉游標

使用close關閉游標

close 游標名

3、創建一個簡單的游標

需求:從商品表中讀取第一行數據

商品表(goods)數據:

注意:我這里已經將MySQL的結束標識符改為 $,如果要知道怎么設置為$,請參考前面一篇文章:MySQL觸發器。

定義:

create procedure p12()
begin
  /*定義三個變量用于存放商品id,商品名稱,商品庫存量*/
  declare row_gid int ; 
  declare row_name varchar(20);
  declare row_num int;
  declare getgoods cursor for select gid,name,num from goods;  --定義游標
  open getgoods; --打開游標
  fetch getgoods into row_gid,row_name,row_num;--從游標中取值
  select row_name,row_num; --顯示操作
  close getgoods; --關閉游標
end$

輸出結果:

4、多次取值操作

create procedure p13()
begin
  declare row_gid int ;
  declare row_name varchar(20);
  declare row_num int;
  declare getgoods cursor for select gid,name,num from goods;  
  open getgoods;
  fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  close getgoods;
end$

輸出:

注意:當游標讀到末尾,如果繼續進行取值操作會發生報錯

5、游標循環表中的所有數據

(1)使用計數器來循環

create procedure p14()
begin 
  declare cnt int default 0;
  declare i int default 0;
  declare row_gid int ;
  declare row_name varchar(20);
  declare row_num int;
  declare getgoods cursor for select gid,name,num from goods;
  select count(*) into cnt from goods;
  open getgoods;
  repeat 
    fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  set i:= i+1;
  until i >= cnt end repeat;
  close getgoods;
end$

輸出結果:

(2)使用越界標志來控制循環

在mysql cursor中,可以聲明declare continue handler來操作1個越界標志

語法:

declare continue handler for NOT FOUND statement;

使用:

create procedure p15()
begin
  declare row_gid int ;
  declare row_name varchar(20);
  declare row_num int;
  declare have int default 1;
  declare getgoods cursor for select gid,name,num from goods;
  declare continue handler for NOT FOUND set have:= 0;
  open getgoods;
  repeat 
    fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  until have = 0 end repeat;
  close getgoods;
end$

輸出結果:

注意:這里發生了錯誤,這里輸出了4行數據,而表中只有3行數據,而且還爆出了警告,后面會說怎么結果這個問題。

程序執行邏輯:

循環游標->fetch第三條數據->顯示->fetch第四條數據->沒有數據->設置have=0操作->執行continue Handler->程序不退出,執行顯示操作->還是顯示第三條數據

6、continue和exit的區別

continue:若沒有數據返回,程序繼續,并將變量IS_FOUND設為0,這種情況是出現在select XX into XXX from tablename的時候發生的。
exit:若沒有數據返回,退出程序,并將變量IS_FOUND設為0,這種情況是出現在select XX into XXX from tablename的時候發生的。

使用exit來替換continue:
使用exit就不會出現上面的那種情況了,程序執行邏輯:

循環游標->fetch到第三條數據->顯示->第四次fetch操作->沒有數據->設置 have=0操作->程序直接退出exit

所以就沒有顯示出第四條數據。

create procedure p16()
begin
  declare row_gid int ;
  declare row_name varchar(20);
  declare row_num int;
  declare have int default 1;
  declare getgoods cursor for select gid,name,num from goods;
  declare exit handler for NOT FOUND set have:= 0;
  open getgoods;
  repeat 
    fetch getgoods into row_gid,row_name,row_num;
  select row_name,row_num;
  until have = 0 end repeat;
  close getgoods;
end$

輸出結果:

7、正確的游標循環

在一些特殊的情況中,我們可以讀到的數據為空,或者壓根sql語句就有錯誤,我們不能避免出現這種情況,所以我們要正確的使用游標循環操作。

首先應該創建游標,然后打開游標后,應先手動進行fetch操作獲取到一行數據,然后再通過循環,在循環里先做處理內容,后進行fetch操作。這樣如果在手動獲取數據的期間就沒有獲得到數據的話,就會執行have = 0,如果是repeat循環,然后進入repeat循環,先輸出null數據,最后又進行獲取,這樣運行到until時就會退出循環;如果是while循環,壓根就不進去while循環里,就不會有任何1行輸出。

(1)repeat循環:

create procedure p17()
begin
  declare row_gid int;
  declare row_name varchar(20);
  declare row_num int;
  declare have int default 1;
  declare getgoods cursor for select gid,name,num from goods where 0;
  declare continue handler for NOT FOUND set have:= 0;
  open getgoods;
  fetch getgoods into row_gid,row_name,row_num;
  repeat 
  select row_name,row_num;
    fetch getgoods into row_gid,row_name,row_num;
  until have = 0 end repeat;
  close getgoods;
end$

輸出結果:

(2)while循環:

create procedure p18()
begin
  declare row_gid int;
  declare row_name varchar(20);
  declare row_num int;
  declare have int default 1;
  declare getgoods cursor for select gid,name,num from goods where 0;
  declare continue handler for NOT FOUND set have:= 0;
  open getgoods;
  fetch getgoods into row_gid,row_name,row_num;
  while have = 1 do 
  select row_name,row_num;
    fetch getgoods into row_gid,row_name,row_num;
  end while;
  close getgoods;
end$

輸出結果:

更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL事務操作技巧匯總》、《MySQL存儲過程技巧大全》、《MySQL數據庫鎖相關技巧匯總》及《MySQL常用函數大匯總》

希望本文所述對大家MySQL數據庫計有所幫助。

您可能感興趣的文章:
  • MySQL 游標的定義與使用方式
  • Mysql 存儲過程中使用游標循環讀取臨時表
  • mysql聲明游標的方法
  • 詳解Mysql 游標的用法及其作用
  • mysql游標的原理與用法實例分析
  • 帶你徹底搞懂python操作mysql數據庫(cursor游標講解)
  • mysql存儲過程之游標(DECLARE)原理與用法詳解
  • mysql的存儲過程、游標 、事務實例詳解
  • Mysql存儲過程中游標的用法實例
  • Mysql存儲過程循環內嵌套使用游標示例代碼
  • MySQL存儲過程中游標循環的跳出和繼續操作示例
  • MySQL 游標的作用與使用相關

標簽:駐馬店 北京 黔西 梅河口 鄂爾多斯 荊門 昌都 陜西

巨人網絡通訊聲明:本文標題《MySQL游標概念與用法詳解》,本文關鍵詞  MySQL,游標,概念,與,用法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL游標概念與用法詳解》相關的同類信息!
  • 本頁收集關于MySQL游標概念與用法詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91麻豆精品国产91久久久久久久久 | 亚洲一区二区在线观看视频| 成a人片国产精品| 综合色中文字幕| 欧美综合亚洲图片综合区| 亚洲精品视频在线观看免费| 欧洲在线/亚洲| 视频在线观看91| 日韩一区二区精品| 国产一区二区福利| 国产精品国产三级国产aⅴ原创 | 91麻豆精品国产91久久久久久久久| 视频一区视频二区在线观看| 日韩你懂的在线播放| 国产精品香蕉一区二区三区| 亚洲色图清纯唯美| 欧美理论在线播放| 国产一区中文字幕| 国产精品久久久久永久免费观看| 欧美性受xxxx黑人xyx性爽| 美女视频一区在线观看| 国产亚洲人成网站| 欧美性做爰猛烈叫床潮| 久久99精品久久久久婷婷| 国产精品第四页| 欧美精品免费视频| 国产九色精品成人porny| 亚洲天堂成人在线观看| 日韩欧美精品三级| 欧美不卡一二三| 久久综合色鬼综合色| 国产精品99久久久久久久女警| 国产精品免费视频观看| 欧美日韩国产三级| 国产a精品视频| 日韩精品一二三区| 欧美国产精品一区二区三区| 在线精品视频一区二区三四| 国产一区视频网站| 亚洲一区影音先锋| 久久久久亚洲综合| 欧美日韩免费高清一区色橹橹 | 欧美一区二区福利视频| www.欧美色图| 国产美女在线精品| 香港成人在线视频| 亚洲品质自拍视频| 久久久久国产精品麻豆ai换脸| 欧美肥妇bbw| 亚洲天堂2014| 亚洲三级在线免费观看| 67194成人在线观看| 成人在线一区二区三区| 久久精品国产在热久久| 洋洋成人永久网站入口| 国产精品色在线观看| 欧美一区二区播放| 欧美视频精品在线观看| 波多野结衣在线一区| 精品一区二区免费在线观看| 日韩国产欧美视频| 亚洲制服丝袜在线| 亚洲伦在线观看| 亚洲靠逼com| 91精品在线麻豆| 欧美网站大全在线观看| 色综合色综合色综合| 国产精一区二区三区| 黄色成人免费在线| 三级一区在线视频先锋| 亚洲午夜电影在线观看| 一区二区三区在线高清| 亚洲狼人国产精品| 综合分类小说区另类春色亚洲小说欧美 | 日韩欧美国产一区在线观看| 欧美亚洲国产一区在线观看网站| 色噜噜狠狠成人中文综合| 色欲综合视频天天天| 99精品在线免费| 色综合咪咪久久| 91精品1区2区| 欧美三日本三级三级在线播放| 欧美午夜精品免费| 欧美日韩久久一区二区| 91麻豆精品国产91久久久更新时间| 欧美人与性动xxxx| 日韩一区二区三区免费看| 26uuu国产一区二区三区| 一本久道中文字幕精品亚洲嫩| 国产1区2区3区精品美女| 久久精品国产99国产| 石原莉奈在线亚洲二区| 狠狠色丁香婷婷综合| 久久成人免费日本黄色| 国产高清在线精品| 成人免费视频app| 91浏览器入口在线观看| 91国产免费看| 日韩亚洲欧美在线| 久久先锋影音av鲁色资源网| 中文字幕一区免费在线观看| 亚洲综合男人的天堂| 免费看黄色91| 成人激情午夜影院| 韩国av一区二区| 欧美日韩aaaaaa| 91精品国产黑色紧身裤美女| 日韩欧美三级在线| 国产亚洲综合在线| 亚洲精品乱码久久久久久| 亚洲成av人影院| 国产美女久久久久| 99精品久久久久久| 日韩一区二区三区电影| 国产精品你懂的在线| 亚洲在线成人精品| 精品一区二区三区在线播放视频| 成人av午夜电影| 欧美肥妇bbw| 国产精品高清亚洲| 天天影视网天天综合色在线播放 | 在线观看91视频| 欧美成人官网二区| 久久久99精品久久| 国产精品国产三级国产aⅴ无密码| 午夜精品视频一区| 国产福利一区二区三区视频| 欧美伊人久久大香线蕉综合69 | 国产精品国产三级国产普通话三级 | 五月综合激情网| 国产精品综合视频| 欧美日本一道本| 亚洲欧美电影一区二区| 久久国产生活片100| 91蜜桃传媒精品久久久一区二区| 91精品欧美福利在线观看| 亚洲天堂a在线| 国产成人免费视频 | 欧美精品一区男女天堂| 亚洲黄色免费网站| 成人av动漫网站| 精品福利在线导航| 首页国产欧美日韩丝袜| 91国内精品野花午夜精品| 欧美激情艳妇裸体舞| 激情综合五月婷婷| 制服丝袜在线91| 亚洲成av人影院| 91福利精品第一导航| 国产精品女主播av| 国产精品1区2区| 久久只精品国产| 美脚の诱脚舐め脚责91 | 成人一区二区视频| 久久老女人爱爱| 蜜臀av一区二区三区| 欧美午夜精品一区二区三区| 亚洲精品视频一区| av男人天堂一区| 国产精品另类一区| 国产91富婆露脸刺激对白| 久久蜜臀中文字幕| 精品一区二区三区不卡| 日韩三级伦理片妻子的秘密按摩| 欧美aⅴ一区二区三区视频| 欧美军同video69gay| 爽好多水快深点欧美视频| 欧美精品99久久久**| 日韩精彩视频在线观看| 欧美日韩一区 二区 三区 久久精品| 亚洲综合一二区| 欧美日韩性生活| 蜜臀av性久久久久蜜臀av麻豆 | 粉嫩高潮美女一区二区三区| 中文字幕成人在线观看| eeuss影院一区二区三区| 国产精品久久毛片a| 91日韩在线专区| 亚洲国产乱码最新视频| 欧美高清视频一二三区| 免费成人结看片| 久久精品日产第一区二区三区高清版| 国产一区二区三区视频在线播放 | 亚洲天堂精品在线观看| 91在线精品秘密一区二区| 亚洲人吸女人奶水| 91网站最新网址| 婷婷国产在线综合| 欧美电影在哪看比较好| 蜜臀久久久久久久| 久久亚洲私人国产精品va媚药| 成人激情av网| 亚洲成人一区二区| 欧美va亚洲va| 波多野结衣亚洲一区| 亚洲一本大道在线| 精品久久久久久亚洲综合网| 99精品1区2区| 首页亚洲欧美制服丝腿| 国产日韩在线不卡|