国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺析SQL數(shù)據(jù)庫(kù)中游標(biāo)及其應(yīng)用

2014-04-29 09:07:07楊銘
考試周刊 2014年105期
關(guān)鍵詞:游標(biāo)教學(xué)應(yīng)用

楊銘

摘 要: 游標(biāo)是SQL數(shù)據(jù)庫(kù)中從數(shù)據(jù)記錄結(jié)果集中提取記錄的一種重要機(jī)制,其手段靈活,形式多樣。本文介紹了游標(biāo)的概念、分類、生命周期和使用游標(biāo)應(yīng)該注意的問題。

關(guān)鍵詞: 游標(biāo) SQL數(shù)據(jù)庫(kù) 教學(xué)應(yīng)用

一、游標(biāo)的概念

游標(biāo)(cursor)是系統(tǒng)為用戶專門開設(shè)的用來存放SQL語句執(zhí)行結(jié)果的一個(gè)數(shù)據(jù)緩沖區(qū)。通常在數(shù)據(jù)庫(kù)開發(fā)過程中要檢索一條記錄時(shí),我們可以使用SELECT語句操作??墒牵绻霃哪硞€(gè)結(jié)果集中逐一的讀取記錄,使用SELECT語句則變得麻煩,此時(shí)利用游標(biāo)可以輕松解決。游標(biāo)其實(shí)可以理解為一個(gè)定義在特定數(shù)據(jù)集上的指針,可以控制這個(gè)指針遍歷數(shù)據(jù)集,或者僅僅是指向特定的行。用戶通過SQL語句從游標(biāo)中逐一地得到記錄,然后賦給主變量,再通過主語言進(jìn)一步處理。

二、游標(biāo)的分類

游標(biāo)是指向SELECT語句查詢出的多行數(shù)據(jù)的指針,SELECT語句查詢出的行組成一結(jié)果表,稱為活動(dòng)集,游標(biāo)指向的行稱為當(dāng)前行。一般說來一般說來,游標(biāo)分為三類,即滾動(dòng)游標(biāo)、非滾動(dòng)游標(biāo)和更新游標(biāo)。

1.滾動(dòng)游標(biāo)是游標(biāo)的位置可來回移動(dòng),即程序可以依據(jù)實(shí)際需要指向活動(dòng)集中某一條記錄。

2.非滾動(dòng)游標(biāo)是指活動(dòng)集中的每條記錄不可被選擇讀取而只能被依次讀取。

3.更新游標(biāo)活動(dòng)集中的記錄只能被一次讀取,其特點(diǎn)在于:數(shù)據(jù)庫(kù)將游標(biāo)當(dāng)前指向的記錄加鎖,當(dāng)程序讀下一條記錄時(shí),本條記錄解鎖,下一條記錄加鎖,鎖加在數(shù)據(jù)庫(kù)基本表對(duì)應(yīng)的行上。

三、游標(biāo)的生命周期

在T-SQL中,游標(biāo)的生命周期由五個(gè)部分組成,即定義游標(biāo)(DECLARE)、打開游標(biāo)(Open)、使用游標(biāo)(FETCH)、關(guān)閉游標(biāo)(CLOSE)和釋放游標(biāo)(DEALLOCATE)。具體實(shí)現(xiàn)步驟為:

1.定義游標(biāo)

在T-SQL中,定義一個(gè)游標(biāo)可以是非常簡(jiǎn)單的,也可以是相對(duì)復(fù)雜的,取決于游標(biāo)的參數(shù),而游標(biāo)的參數(shù)設(shè)置取決于你對(duì)游標(biāo)原理的了解程度。游標(biāo)其實(shí)可以理解成一個(gè)定義在特定數(shù)據(jù)集上的指針,我們可以控制這個(gè)指針遍歷數(shù)據(jù)集,或者僅僅是指向特定的行,所以游標(biāo)是定義在以Select開始的數(shù)據(jù)集上的,T-SQL中的游標(biāo)定義的格式如下:

DECLARE〈游標(biāo)名〉[SCROLL]CURSOR FOR SELECT語句

有關(guān)鍵字SCROLL的DECLARE語句定義的是滾動(dòng)游標(biāo)。SELECT語句可表為:

SELECT子句

[INTO子句]

FROM子句

[WHERE子句]

[GROUP BY子句]

[HAVING子句]

[ORDER BY子句]

[INTO TEMP子句]

DECLARE語句的作用是在數(shù)據(jù)庫(kù)系統(tǒng)表中分配該游標(biāo)資源,給游標(biāo)一個(gè)自己的名字。游標(biāo)名的作用范圍是只要游標(biāo)不被釋放(FREE),在定義它的模塊內(nèi)就有效。

2.打開游標(biāo)

當(dāng)定義完游標(biāo)后,游標(biāo)需要打開后使用,只有簡(jiǎn)單一行代碼。注意,當(dāng)全局游標(biāo)和局部游標(biāo)變量重名時(shí),默認(rèn)會(huì)打開局部變量游標(biāo)。打開游標(biāo)語句執(zhí)行游標(biāo)定義中的SELECT語句,查詢結(jié)果存放在游標(biāo)緩沖區(qū)中(當(dāng)打開的是滾動(dòng)游標(biāo)時(shí),還要建一個(gè)臨時(shí)表)。當(dāng)游標(biāo)的訪問位置沒有指定時(shí),默認(rèn)將游標(biāo)指針指向游標(biāo)區(qū)中的第一條記錄。查詢結(jié)果的內(nèi)容依據(jù)設(shè)置的查詢語句和查詢條件。打開游標(biāo)的語句格式:

OPEN〈游標(biāo)名〉

3.使用游標(biāo)

游標(biāo)的使用分為兩部分:一部分是操作游標(biāo)在數(shù)據(jù)集內(nèi)的指向,另一部分是將游標(biāo)所指向的行的部分或全部?jī)?nèi)容進(jìn)行操作。代碼如下:

FETCH[[NEXT|PRIOR|FIRST|LAST| ABSOLUTE n| RELATIVE n]

FROM]〈游標(biāo)名〉

[INTO @變量1,@變量2,…]

4.關(guān)閉游標(biāo)

在游標(biāo)使用完之后,一定要記得關(guān)閉,關(guān)閉后游標(biāo)區(qū)的數(shù)據(jù)不可再讀,但可以使用OPEN語句再次打開后再使用該游標(biāo)。代碼如下:

CLOSE〈游標(biāo)名〉

5.釋放游標(biāo)

當(dāng)游標(biāo)不再需要被使用后釋放游標(biāo)。代碼如下:

DEALLOCATE〈游標(biāo)名〉

四、游標(biāo)的優(yōu)化

1.用完之后一定要關(guān)閉和釋放。

2.盡量不要在大量數(shù)據(jù)上定義游標(biāo)。

3.盡量不要使用游標(biāo)上更新數(shù)據(jù)。

4.盡量不要使用insensitive,static和keyset這些參數(shù)定義游標(biāo)。

5.如果只對(duì)數(shù)據(jù)進(jìn)行讀取,當(dāng)讀取時(shí)只用到FETCH NEXT選項(xiàng),則最好使用FORWARD_ONLY參數(shù)。

五、結(jié)語

在數(shù)據(jù)庫(kù)中,游標(biāo)提供了一種可以操作從表中已被檢索出的數(shù)據(jù)結(jié)果集中記錄的靈活機(jī)制,可以從多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄。盡管如此,但游標(biāo)會(huì)一定程度地影響系統(tǒng)的性能,如使用游標(biāo)會(huì)導(dǎo)致頁鎖與表鎖的增加,以及網(wǎng)絡(luò)通信量的增加等,所以更要正確使用游標(biāo),靈活應(yīng)用游標(biāo)。

參考文獻(xiàn):

[1]田耕.淺談數(shù)據(jù)庫(kù)游標(biāo)及其應(yīng)用[J].廣東金融電腦,2000(03).

[2]林曉峰.SQL SER VER服務(wù)器游標(biāo)應(yīng)用方法與實(shí)例[J].成才,2000(07).

[3]陳芳勤.SQL Server 2000中游標(biāo)的應(yīng)用[J].中國(guó)科技信息,2008(13).

猜你喜歡
游標(biāo)教學(xué)應(yīng)用
開繞組直線游標(biāo)永磁電機(jī)的矢量控制研究
MySQL數(shù)據(jù)庫(kù)下游標(biāo)的設(shè)計(jì)與應(yīng)用
測(cè)量不確定度在游標(biāo)式輪對(duì)內(nèi)距尺檢定裝置中的應(yīng)用
物理實(shí)驗(yàn)思維核心素養(yǎng)的培養(yǎng)與突破
——游標(biāo)卡尺、螺旋測(cè)微器的應(yīng)用和拓展
物理教師(2020年1期)2020-04-24 00:46:50
淺談初中語文教學(xué)中多媒體的應(yīng)用
考試周刊(2016年77期)2016-10-09 10:48:31
中等職業(yè)學(xué)校開設(shè)三維動(dòng)畫課程的教學(xué)研究
考試周刊(2016年76期)2016-10-09 10:14:36
多媒體教育技術(shù)在初中化學(xué)教學(xué)中的應(yīng)用
考試周刊(2016年76期)2016-10-09 09:56:58
翻轉(zhuǎn)課堂在小學(xué)數(shù)學(xué)教學(xué)中的應(yīng)用
考試周刊(2016年76期)2016-10-09 09:02:40
學(xué)案式教學(xué)模式在初中數(shù)學(xué)教學(xué)中的應(yīng)用
考試周刊(2016年76期)2016-10-09 08:57:00
一階微分方程的初等解法及應(yīng)用
考試周刊(2016年76期)2016-10-09 08:53:28
米脂县| 柏乡县| 安塞县| 车险| 镇安县| 秦安县| 会泽县| 兴业县| 永康市| 富宁县| 台南县| 平湖市| 会泽县| 鄂伦春自治旗| 疏附县| 偏关县| 正阳县| 大姚县| 行唐县| 玉龙| 静乐县| 惠安县| 铜鼓县| 太原市| 买车| 古蔺县| 云霄县| 盐城市| 凤山县| 赞皇县| 年辖:市辖区| 景德镇市| 丹凤县| 正镶白旗| 五华县| 商洛市| 墨江| 清河县| 东乌| 景泰县| 丰宁|