婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Mysql 游標(biāo)的用法及其作用

詳解Mysql 游標(biāo)的用法及其作用

熱門標(biāo)簽:臨沂做地圖標(biāo)注 咸陽防封電銷卡 宜賓全自動外呼系統(tǒng)廠家 廣東400企業(yè)電話申請流程 許昌外呼增值業(yè)務(wù)線路 石家莊400電話辦理公司 申請400電話電話價格 地圖標(biāo)注客戶付款 新鄉(xiāng)智能外呼系統(tǒng)好處

[mysql游標(biāo)的用法及作用]

例子:

當(dāng)前有三張表A、B、C其中A和B是一對多關(guān)系,B和C是一對多關(guān)系,現(xiàn)在需要將B中A表的主鍵存到C中;
常規(guī)思路就是將B中查詢出來然后通過一個update語句來更新C表就可以了,但是B表中有2000多條數(shù)據(jù),
難道要執(zhí)行2000多次?顯然是不現(xiàn)實的;最終找到寫一個存儲過程然后通過循環(huán)來更新C表,
然而存儲過程中的寫法用的就是游標(biāo)的形式。

【簡介】

游標(biāo)實際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機制。

​ 游標(biāo)充當(dāng)指針的作用。

​ 盡管游標(biāo)能遍歷結(jié)果中的所有行,但他一次只指向一行。

​ 游標(biāo)的作用就是用于對查詢數(shù)據(jù)庫所返回的記錄進(jìn)行遍歷,以便進(jìn)行相應(yīng)的操作。

【用法】

 一、聲明一個游標(biāo): declare 游標(biāo)名稱 CURSOR for table;(這里的table可以是你查詢出來的任意集合)
​ 二、打開定義的游標(biāo):open 游標(biāo)名稱;
​ 三、獲得下一行數(shù)據(jù):FETCH 游標(biāo)名稱 into testrangeid,versionid;
​ 四、需要執(zhí)行的語句(增刪改查):這里視具體情況而定
​ 五、釋放游標(biāo):CLOSE 游標(biāo)名稱;

注:mysql存儲過程每一句后面必須用;結(jié)尾,使用的臨時字段需要在定義游標(biāo)之前進(jìn)行聲明。

【實例】

- 
BEGIN 
 
--定義變量 
declare testrangeid BIGINT; 
declare versionid BIGINT; 
declare done int; 
--創(chuàng)建游標(biāo),并存儲數(shù)據(jù) 
declare cur_test CURSOR for 
 select id as testrangeid,version_id as versionid from tp_testrange; 
--游標(biāo)中的內(nèi)容執(zhí)行完后將done設(shè)置為1 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; 
--打開游標(biāo) 
open cur_test; 
--執(zhí)行循環(huán) 
 posLoop:LOOP 
--判斷是否結(jié)束循環(huán) 
  IF done=1 THEN 
  LEAVE posLoop; 
 END IF; 
--取游標(biāo)中的值 
 FETCH cur_test into testrangeid,versionid; 
--執(zhí)行更新操作 
 update tp_data_execute set version_id=versionid where testrange_id = testrangeid; 
 END LOOP posLoop; 
--釋放游標(biāo) 
CLOSE cur_test; 
 
END 
-

例子2:

我們現(xiàn)在要用存儲過程做一個功能,統(tǒng)計iphone的總庫存是多少,并把總數(shù)輸出到控制臺。

--在windows系統(tǒng)中寫存儲過程時,如果需要使用declare聲明變量,需要添加這個關(guān)鍵字,否則會報錯。 
delimiter // 
drop procedure if exists StatisticStore; 
CREATE PROCEDURE StatisticStore() 
BEGIN 
 --創(chuàng)建接收游標(biāo)數(shù)據(jù)的變量 
 declare c int; 
 declare n varchar(20); 
 --創(chuàng)建總數(shù)變量 
 declare total int default 0; 
 --創(chuàng)建結(jié)束標(biāo)志變量 
 declare done int default false; 
 --創(chuàng)建游標(biāo) 
 declare cur cursor for select name,count from store where name = 'iphone'; 
 --指定游標(biāo)循環(huán)結(jié)束時的返回值 
 declare continue HANDLER for not found set done = true; 
 --設(shè)置初始值 
 set total = 0; 
 --打開游標(biāo) 
 open cur; 
 --開始循環(huán)游標(biāo)里的數(shù)據(jù) 
 read_loop:loop 
 --根據(jù)游標(biāo)當(dāng)前指向的一條數(shù)據(jù) 
 fetch cur into n,c; 
 --判斷游標(biāo)的循環(huán)是否結(jié)束 
 if done then 
  leave read_loop; --跳出游標(biāo)循環(huán) 
 end if; 
 --獲取一條數(shù)據(jù)時,將count值進(jìn)行累加操作,這里可以做任意你想做的操作, 
 set total = total + c; 
 --結(jié)束游標(biāo)循環(huán) 
 end loop; 
 --關(guān)閉游標(biāo) 
 close cur; 
 
 --輸出結(jié)果 
 select total; 
END; 
--調(diào)用存儲過程 
call StatisticStore();

fetch是獲取游標(biāo)當(dāng)前指向的數(shù)據(jù)行,并將指針指向下一行,當(dāng)游標(biāo)已經(jīng)指向最后一行時繼續(xù)執(zhí)行會造成游標(biāo)溢出。
使用loop循環(huán)游標(biāo)時,他本身是不會監(jiān)控是否到最后一條數(shù)據(jù)了,像下面代碼這種寫法,就會造成死循環(huán);

read_loop:loop 
fetch cur into n,c; 
set total = total+c; 
end loop;

在MySql中,造成游標(biāo)溢出時會引發(fā)mysql預(yù)定義的NOT FOUND錯誤,所以在上面使用下面的代碼指定了當(dāng)引發(fā)not found錯誤時定義一個continue 的事件,指定這個事件發(fā)生時修改done變量的值。

declare continue HANDLER for not found set done = true;

所以在循環(huán)時加上了下面這句代碼:

--判斷游標(biāo)的循環(huán)是否結(jié)束 
if done then 
 leave read_loop; --跳出游標(biāo)循環(huán) 
end if;

如果done的值是true,就結(jié)束循環(huán)。繼續(xù)執(zhí)行下面的代碼

使用方式

游標(biāo)有三種使用方式:
第一種就是上面的實現(xiàn),使用loop循環(huán);
第二種方式如下,使用while循環(huán):

drop procedure if exists StatisticStore1; 
CREATE PROCEDURE StatisticStore1() 
BEGIN 
 declare c int; 
 declare n varchar(20); 
 declare total int default 0; 
 declare done int default false; 
 declare cur cursor for select name,count from store where name = 'iphone'; 
 declare continue HANDLER for not found set done = true; 
 set total = 0; 
 open cur; 
 fetch cur into n,c; 
 while(not done) do 
  set total = total + c; 
  fetch cur into n,c; 
 end while; 
  
 close cur; 
 select total; 
END; 
 
call StatisticStore1();

第三種方式是使用repeat執(zhí)行:

drop procedure if exists StatisticStore2; 
CREATE PROCEDURE StatisticStore2() 
BEGIN 
 declare c int; 
 declare n varchar(20); 
 declare total int default 0; 
 declare done int default false; 
 declare cur cursor for select name,count from store where name = 'iphone'; 
 declare continue HANDLER for not found set done = true; 
 set total = 0; 
 open cur; 
 repeat 
 fetch cur into n,c; 
 if not done then 
  set total = total + c; 
 end if; 
 until done end repeat; 
 close cur; 
 select total; 
END; 
 
call StatisticStore2();

游標(biāo)嵌套

在mysql中,每個begin end 塊都是一個獨立的scope區(qū)域,由于MySql中同一個error的事件只能定義一次,如果多定義的話在編譯時會提示Duplicate handler declared in the same block。

drop procedure if exists StatisticStore3; 
CREATE PROCEDURE StatisticStore3() 
BEGIN 
 declare _n varchar(20); 
 declare done int default false; 
 declare cur cursor for select name from store group by name; 
 declare continue HANDLER for not found set done = true; 
 open cur; 
 read_loop:loop 
 fetch cur into _n; 
 if done then 
  leave read_loop; 
 end if; 
 begin 
  declare c int; 
  declare n varchar(20); 
  declare total int default 0; 
  declare done int default false; 
  declare cur cursor for select name,count from store where name = 'iphone'; 
  declare continue HANDLER for not found set done = true; 
  set total = 0; 
  open cur; 
  iphone_loop:loop 
  fetch cur into n,c; 
  if done then 
   leave iphone_loop; 
  end if; 
  set total = total + c; 
  end loop; 
  close cur; 
  select _n,n,total; 
 end; 
 begin 
   declare c int; 
   declare n varchar(20); 
   declare total int default 0; 
   declare done int default false; 
   declare cur cursor for select name,count from store where name = 'android'; 
   declare continue HANDLER for not found set done = true; 
   set total = 0; 
   open cur; 
   android_loop:loop 
   fetch cur into n,c; 
   if done then 
    leave android_loop; 
   end if; 
   set total = total + c; 
   end loop; 
   close cur; 
  select _n,n,total; 
 end; 
 begin 
  
 end; 
 end loop; 
 close cur; 
END; 
 
call StatisticStore3();

上面就是實現(xiàn)一個嵌套循環(huán),當(dāng)然這個例子比較牽強。湊合看看就行。

動態(tài)SQL

Mysql 支持動態(tài)SQL的功能

set @sqlStr='select * from table where condition1 = ?'; 
prepare s1 for @sqlStr; 
--如果有多個參數(shù)用逗號分隔 
execute s1 using @condition1; 
--手工釋放,或者是 connection 關(guān)閉時, server 自動回收 
deallocate prepare s1;

以上就是詳解Mysql 游標(biāo)的詳細(xì)內(nèi)容,更多關(guān)于Mysql 游標(biāo)的資料請關(guān)注腳本之家其它相關(guān)文章!

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

標(biāo)簽:北京 合肥 鷹潭 日照 阜新 鎮(zhèn)江 貴州 臺灣

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Mysql 游標(biāo)的用法及其作用》,本文關(guān)鍵詞  詳解,Mysql,游,標(biāo)的,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Mysql 游標(biāo)的用法及其作用》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Mysql 游標(biāo)的用法及其作用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线看国产日韩| 精品福利在线导航| 国产乱色国产精品免费视频| 91视视频在线直接观看在线看网页在线看| 91理论电影在线观看| 欧美成人猛片aaaaaaa| 亚洲视频在线一区二区| 中文无字幕一区二区三区| 亚洲乱码国产乱码精品精的特点| 亚洲午夜日本在线观看| 精品在线播放免费| 99久久99久久综合| 国产欧美一区二区精品婷婷| 麻豆国产欧美一区二区三区| 欧美色精品天天在线观看视频| 一本一道久久a久久精品综合蜜臀| 美女视频黄a大片欧美| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 在线观看亚洲精品| 精品国偷自产国产一区| 亚洲六月丁香色婷婷综合久久| 色婷婷久久久综合中文字幕 | 一级中文字幕一区二区| 一区二区三区四区在线免费观看| 欧美一卡二卡三卡四卡| 欧美在线一二三四区| 99精品国产视频| 精品国产第一区二区三区观看体验| 麻豆精品国产传媒mv男同| 欧美情侣在线播放| 久久精品欧美一区二区三区不卡| 亚洲欧美日韩一区二区三区在线观看| 成人高清视频在线| 国产女主播视频一区二区| 成人午夜碰碰视频| 欧美日韩一区久久| 91麻豆自制传媒国产之光| 国产亚洲美州欧州综合国| 日韩精品色哟哟| 日韩欧美国产午夜精品| 精品一区二区三区蜜桃| 国产欧美日本一区视频| 午夜欧美视频在线观看| 日韩美女久久久| 国产成人av电影在线观看| 欧美一区二区网站| 日韩电影一区二区三区四区| 国内成人精品2018免费看| 亚洲欧洲一区二区三区| 亚洲国产精品av| 国产.欧美.日韩| 日本强好片久久久久久aaa| 在线日韩国产精品| 2021国产精品久久精品| 欧美日韩另类国产亚洲欧美一级| 91久久线看在观草草青青| 综合婷婷亚洲小说| av电影在线观看不卡| www日韩大片| 丰满亚洲少妇av| 日本一区免费视频| 一区二区三区在线播| 一本一道综合狠狠老| 1024成人网色www| 色久综合一二码| 香蕉成人伊视频在线观看| 欧美精三区欧美精三区| 成人美女视频在线看| 亚洲激情图片一区| 国产日韩视频一区二区三区| 久久久99精品免费观看不卡| 成人激情免费网站| 热久久免费视频| 国产精品久久久久久久久搜平片 | 欧美在线观看视频一区二区| 亚洲成a人片在线不卡一二三区| 欧美在线三级电影| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品88888| 精品国免费一区二区三区| aaa亚洲精品一二三区| 日本不卡一区二区| 国产精品欧美久久久久无广告 | 国产精品天美传媒沈樵| 欧美另类一区二区三区| 国产毛片精品视频| 欧美韩日一区二区三区| 午夜精品一区二区三区电影天堂| 亚洲人亚洲人成电影网站色| 欧美老肥妇做.爰bbww| 麻豆国产欧美日韩综合精品二区| 精品欧美一区二区在线观看| 国产成人a级片| 国产乱对白刺激视频不卡| 国产午夜精品一区二区三区嫩草| 国产米奇在线777精品观看| 一区二区三区国产豹纹内裤在线| 国产精品网友自拍| 久久久不卡影院| 日韩一区二区高清| 欧美精品久久99| 欧美亚洲综合久久| 欧美日韩中文字幕一区二区| 99久久免费国产| 不卡的av电影| 色悠悠久久综合| 日本大香伊一区二区三区| 欧美性xxxxxxxx| 日韩一二在线观看| 国产欧美日韩另类一区| 国产精品第五页| 亚洲图片欧美激情| 亚洲亚洲人成综合网络| 免费高清成人在线| 国产成人在线观看免费网站| 91丨九色porny丨蝌蚪| 欧美色图片你懂的| 日韩女优制服丝袜电影| 久久久99精品久久| 亚洲欧美日韩在线播放| 天堂一区二区在线| 国产精品一区二区你懂的| bt欧美亚洲午夜电影天堂| 在线观看免费一区| 精品欧美乱码久久久久久| 中文字幕免费在线观看视频一区| 亚洲女同一区二区| 日本欧美一区二区在线观看| 国产一区三区三区| 色婷婷av一区二区三区gif | av午夜精品一区二区三区| 色天天综合色天天久久| 欧美精品乱人伦久久久久久| 国产性做久久久久久| 一区二区三区四区在线免费观看| 国产欧美精品一区aⅴ影院 | 一区二区三区四区中文字幕| 日本在线不卡视频一二三区| 国产一区二区三区蝌蚪| 欧美午夜一区二区| 国产精品视频线看| 免费在线观看一区二区三区| av资源网一区| 国产日韩精品一区二区三区 | 国产一区二区在线观看免费| 婷婷久久综合九色国产成人| 成人福利电影精品一区二区在线观看| 欧美美女网站色| 一区二区在线观看视频在线观看| 国产精品一线二线三线精华| 欧美日本乱大交xxxxx| 亚洲欧洲成人精品av97| 国产一区二区主播在线| 欧美一区二区视频在线观看2020| 亚洲精品第1页| 99精品国产热久久91蜜凸| 日本一区二区综合亚洲| 精品一区二区日韩| 日韩免费视频一区| 日韩在线一二三区| 欧美性视频一区二区三区| 亚洲精品视频一区二区| 色婷婷av一区二区三区大白胸| 亚洲丝袜另类动漫二区| 成人福利在线看| 国产精品久久毛片| 大白屁股一区二区视频| 国产午夜精品一区二区| 国产成人精品综合在线观看| 久久一日本道色综合| 国产在线不卡一区| 久久综合久久综合久久综合| 免费观看在线综合| 日韩美女视频在线| 三级久久三级久久久| 日韩三级精品电影久久久| 美女看a上一区| 欧美精品一区二区三区在线播放 | 91精品国产综合久久蜜臀| 天堂va蜜桃一区二区三区| 在线播放91灌醉迷j高跟美女 | 麻豆视频观看网址久久| 久久久久久久久久久久电影| 欧美亚洲动漫另类| 不卡电影免费在线播放一区| 久久99精品一区二区三区三区| 一区二区三区在线视频播放| 久久综合久久综合久久| 欧美乱妇20p| 91久久精品一区二区二区| 国产成人日日夜夜| 日韩精品亚洲专区| 一区二区高清在线| 亚洲色图都市小说| 国产欧美精品国产国产专区 | 欧美视频精品在线| 一本到高清视频免费精品| 国产成人免费网站| 国产成人午夜高潮毛片| 久久精品av麻豆的观看方式|