999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MySQL數(shù)據(jù)庫下游標(biāo)的設(shè)計與應(yīng)用

2021-10-30 06:47:32李艷杰
黑龍江科學(xué) 2021年20期
關(guān)鍵詞:數(shù)據(jù)庫

李艷杰

(山東華宇工學(xué)院,山東 德州 253034)

數(shù)據(jù)庫中會經(jīng)常用到查詢,查詢的結(jié)果是符合條件的多條記錄的集合。但有時在查詢時并不需要把所有符合條件的記錄全部取出,或是需要逐條獲取記錄的值,此時普通查詢實(shí)現(xiàn)不了,需要用到游標(biāo)來逐條讀取記錄值,并對逐條記錄進(jìn)行使用。在數(shù)據(jù)庫中,游標(biāo)是系統(tǒng)為用戶開設(shè)的緩沖區(qū)域,存放SQL 語句的執(zhí)行結(jié)果,實(shí)際上,游標(biāo)是一種能從包括多條數(shù)據(jù)記錄結(jié)果集中每次提取一條記錄的機(jī)制,游標(biāo)允許應(yīng)用程序?qū)Σ樵冋Z句select 返回的行結(jié)果集中每一條記錄進(jìn)行相同或不同的操作,而不是一次對整個結(jié)果集進(jìn)行同一種操作,從而可以發(fā)揮每一條記錄的作用。游標(biāo)通常體現(xiàn)在存儲過程中。

1 游標(biāo)的使用步驟

1.1 聲明游標(biāo)

MySQL中使用declare 關(guān)鍵字來聲明游標(biāo),其語法結(jié)構(gòu)及解釋如下所示:

Declare 游標(biāo)名稱 cursor for select語句。

注意:關(guān)鍵字是不能少的,游標(biāo)名稱符合標(biāo)識符的定義即可。select語句根據(jù)需求不同,此時內(nèi)存便分配一塊空間來存儲返回的結(jié)果集。這塊空間也可以認(rèn)為是一個虛表,這個虛表便是游標(biāo)。

1.2 打開游標(biāo)

打開游標(biāo)的關(guān)鍵字為open,其語法結(jié)構(gòu)及解釋如下所示:

Open 游標(biāo)名稱。

打開游標(biāo)即激活查詢并識別游標(biāo),此時游標(biāo)中的指針指向查詢出的結(jié)果集中第一行記錄的前面。

1.3 使用游標(biāo)

使用游標(biāo)的關(guān)鍵字為fetch和into,其語法結(jié)構(gòu)及解釋如下所示:

Fetch 游標(biāo)名稱 into 變量。

注意:第一次使用時,指針指向結(jié)果集中第一條記錄并提取里面的值,每調(diào)用一次,指針會下移一條記錄,此時的變量個數(shù)與select語句后面的字段個數(shù)一致。

1.4 關(guān)閉游標(biāo)

關(guān)閉游標(biāo)的關(guān)鍵字為close,其語法結(jié)構(gòu)及解釋如下所示:

Close 游標(biāo)名稱。

當(dāng)游標(biāo)指針指向最后一條記錄之后,即不能提取數(shù)據(jù)時,此時需要關(guān)閉游標(biāo),釋放資源,不能再用fetch來提取數(shù)據(jù)了。

2 定義處理程序

游標(biāo)是寫在存儲過程中的,有時數(shù)據(jù)量大,不清楚記錄的行數(shù),此時需要定義處理程序。定義處理程序說明如下:

declare 參數(shù)1 handler for 參數(shù)2 SQL語句。

參數(shù)1:exit退出當(dāng)前程序,continue 繼續(xù)執(zhí)行程序。

參數(shù)2:not found 代表當(dāng)fetch抓取不到數(shù)據(jù)時,即游標(biāo)指針走到最后一條記錄的后面,沒有記錄可以提取了。

SQL語句:set temp=1,注意temp是變量,必須提前聲明,其值只能是0(false)或1(true)。

3 游標(biāo)的應(yīng)用

3.1 建立數(shù)據(jù)庫和表

在ceshi1數(shù)據(jù)庫下,建表。在create table book1(bid int,shl int,jg float),輸入3條記錄,代碼如下:

Insert into book1 values(102,1,15),(103,3,5) ,(101,2,10);

3.2 游標(biāo)應(yīng)用

3.2.1 建立案例anli7

建立存儲過程anli7,獲取book1表中的所有記錄,并逐行獲取進(jìn)行顯示。代碼和解釋如下:

create procedure anli7() -建立存儲過程;

begin -把語句放到一個begin塊內(nèi);

declare a,b int; -聲明變量存放圖書編號和數(shù)量;

declare c float; -聲明變量存放圖書價格;

declare c1 cursor for select * from book1; -聲明游標(biāo);

open c1; -打開游標(biāo);

fetch c1 into a,b,c; -使用游標(biāo)提取第一條記錄;

select a,b,c; -顯示a,b,c的值;

fetch c1 into a,b,c; -使用游標(biāo)提取第二條記錄;

select a,b,c; -顯示a,b,c的值;

fetch c1 into a,b,c; -使用游標(biāo)提取第三條記錄;

select a,b,c; -顯示a,b,c的值;

close c1; -關(guān)閉游標(biāo);

end // -此語句塊結(jié)束。

完成之后,利用語句mysql> call anli7()//,執(zhí)行存儲過程,顯示第一條記錄的結(jié)果如圖1所示:

圖1 執(zhí)行結(jié)果Fig.1 Execution results

此案例中,已經(jīng)知道了此表中有3條記錄,可以提取3次,假設(shè)不知道有幾條記錄,此時的解決辦法是使用循環(huán)。由于用到循環(huán),必須考慮循環(huán)退出條件,由于無法確定記錄條數(shù),所以退出條件無法寫,需要定義處理程序,即當(dāng)程序本身發(fā)現(xiàn)問題時,會自動去處理。以下用循環(huán)實(shí)現(xiàn)。

3.2.2 建立案例anli8

用循環(huán)獲取book1表中的所有記錄,并逐行獲取進(jìn)行顯示。

create procedure anli8() -建立存儲過程;

begin -把語句放到一個begin塊內(nèi);

declare a,b int; -聲明變量存放圖書編號和數(shù)量;

declare c float; -聲明變量存放圖書價格;

declare temp int default 0; -聲明一個變量,默認(rèn)值為0;

declare c1 cursor for select * from book1; -聲明游標(biāo);

declare exit handler for not found set temp=1; -not found代表拿不到數(shù)據(jù)。即select語句返回值為空。執(zhí)行set語句,把原來的默認(rèn)值0改為1,同時退出整個程序。即當(dāng)游標(biāo)通過循環(huán)取完記錄,最終取不到記錄時,退出循環(huán)。

open c1; -打開游標(biāo);

repeat -循環(huán)語句開始;

fetch c1 into a,b,c; -通過循環(huán)使用游標(biāo)提取每一條記錄;

select a,b,c; -顯示a,b,c的值;

until temp=1 -循環(huán)結(jié)束條件;

end repeat; -退出循環(huán);

close c1; -關(guān)閉游標(biāo);

end // --此語句塊結(jié)束。

由此可見,通過循環(huán)獲取每一條語句程序更簡潔合理,因此在存儲過程中絕大部分的游標(biāo)是和循環(huán)結(jié)合使用的。

4 總結(jié)

重點(diǎn)介紹了MySQL數(shù)據(jù)庫中游標(biāo)含義和使用游標(biāo)的步驟及如何高效使用游標(biāo),并舉例說明游標(biāo)的具體使用,以便更方便地使用游標(biāo)解決現(xiàn)實(shí)生活中的問題。

猜你喜歡
數(shù)據(jù)庫
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
數(shù)據(jù)庫
財經(jīng)(2015年3期)2015-06-09 17:41:31
數(shù)據(jù)庫
財經(jīng)(2014年21期)2014-08-18 01:50:18
數(shù)據(jù)庫
財經(jīng)(2014年6期)2014-03-12 08:28:19
數(shù)據(jù)庫
財經(jīng)(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 亚洲中文字幕无码爆乳| 日韩精品免费一线在线观看| 老司机午夜精品视频你懂的| 久久久久无码国产精品不卡| 福利小视频在线播放| 国产嫖妓91东北老熟女久久一| 丁香婷婷综合激情| 亚洲开心婷婷中文字幕| 精品人妻系列无码专区久久| 91亚洲国产视频| 91精品人妻一区二区| 中文天堂在线视频| 国产免费网址| 亚洲成肉网| 在线观看亚洲精品福利片| 亚洲欧美色中文字幕| 第九色区aⅴ天堂久久香| 91久草视频| 免费毛片a| 国产一在线| 福利国产微拍广场一区视频在线| 成人第一页| 自慰网址在线观看| 日韩无码黄色网站| 欧美日韩一区二区三区在线视频| 国产一区二区精品高清在线观看| 91色国产在线| 亚洲人精品亚洲人成在线| 亚洲一区波多野结衣二区三区| 亚洲欧美精品日韩欧美| 成年人免费国产视频| 日韩精品视频久久| 一级毛片免费观看久| 亚洲αv毛片| 综合色亚洲| 99热这里只有精品在线观看| 欧美激情伊人| 国产欧美日韩18| 91视频首页| 国产精品xxx| 伊人久久大香线蕉综合影视| 国产乱肥老妇精品视频| 欧美高清国产| 第九色区aⅴ天堂久久香| 国产性猛交XXXX免费看| 精品国产黑色丝袜高跟鞋 | 99re精彩视频| 萌白酱国产一区二区| 国产精品视频猛进猛出| 日韩毛片免费视频| 婷婷亚洲最大| 天天色天天综合网| 在线不卡免费视频| 日韩人妻无码制服丝袜视频| 欧美精品xx| 97在线免费视频| 又黄又湿又爽的视频| 亚洲视频欧美不卡| 乱人伦视频中文字幕在线| 日韩中文无码av超清| 亚洲精品另类| 欧美精品黑人粗大| 国产剧情无码视频在线观看| 国产精品林美惠子在线播放| 在线国产91| 国产一级精品毛片基地| 国产日韩欧美视频| 91麻豆精品视频| 国产日韩欧美精品区性色| 99人妻碰碰碰久久久久禁片| 狠狠色噜噜狠狠狠狠色综合久 | 性激烈欧美三级在线播放| 免费人成网站在线观看欧美| 五月天香蕉视频国产亚| 亚洲一区网站| 亚洲AV电影不卡在线观看| 亚洲精品欧美重口| 久久窝窝国产精品午夜看片| 国产网友愉拍精品| 亚洲无码精彩视频在线观看| 国产一区二区三区在线精品专区| 国产人成乱码视频免费观看|