日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
你知道MySQL中的游標嗎?

什么是游標?

游標(cursor)是一個存儲在MySQL服務器上的數(shù)據(jù)庫查詢, 它不是一條SELECT語句,而是被該語句檢索出來的結(jié)果集。在存儲了游 標之后,應用程序可以根據(jù)需要滾動或瀏覽其中的數(shù)據(jù)。

注意:MySQL游標只能用于 存儲過程(和函數(shù))。

創(chuàng)建游標

在創(chuàng)建一個游標前,我們需要先清除游標的語法。

1.定義游標

DECLARE 游標名稱 CURSOR FOR SQL語句;

2.打開游標

OPEN 游標名稱;

3.獲取結(jié)果

FETCH 游標名稱 INTO 變量名稱[,變量名稱];

4.關(guān)閉游標

CLOSE 游標名稱;

我們以Customers表來作為示例:

示例一 :

定義一個存儲過程,調(diào)用的時候執(zhí)行里面的游標。

CREATE PROCEDURE PROC1()
BEGIN
-- 定義兩個存放結(jié)果的變量
DECLARE NAME VARCHAR(20);
DECLARE ADDR VARCHAR(50);
-- 聲明游標
DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers;
-- 打開游標
OPEN MY;
-- 獲取結(jié)果
FETCH MY INTO NAME,ADDR;
-- 這里是為了顯示獲取結(jié)果
SELECT NAME,ADDR;
-- 關(guān)閉游標
CLOSE MY;
END;

我們執(zhí)行完上面的存儲過程后,就可以調(diào)用該存儲過程了。

CALL PROC1();

得到結(jié)果:

這里肯定有小伙伴好奇,customers表里明明有7條記錄,為什么只顯示了1條記錄?這是因為游標的變量只保留了customers表中的第一行數(shù)據(jù),如果要查看后面的數(shù)據(jù),就需要循環(huán)往下移動游標,才能繼續(xù)查看。

示例二:

定義一個存儲過程,調(diào)用存儲過程時,將表customers里的數(shù)據(jù)循環(huán)寫入新的表里面。

CREATE PROCEDURE PROC2()
BEGIN
-- 定義兩個存放結(jié)果的變量
DECLARE FLAG INT DEFAULT 0;
DECLARE NAME VARCHAR(20);
DECLARE ADDR VARCHAR(50);
-- 聲明游標
DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET FLAG=1;
-- 打開游標
OPEN MY;
-- 循環(huán)體部分
L1:LOOP
-- 獲取結(jié)果
FETCH MY INTO NAME,ADDR;
IF FLAG=1 THEN
LEAVE L1;
END IF;
-- 這里是為了顯示獲取結(jié)果
INSERT INTO cus VALUES(NAME,ADDR);
-- 關(guān)閉游標
END LOOP; -- 結(jié)束循環(huán)
CLOSE MY;
END;

然后我們執(zhí)行這個存儲過程,并查詢cus表里的數(shù)據(jù)

CALL PROC2();
SELECT * FROM cus;

結(jié)果:

結(jié)果與customers里的一致,但是這些結(jié)果是循環(huán)一條一條往下移動的過程中插入的,即這個循環(huán)執(zhí)行了7次。

以上就是游標的基本操作原理了,此外游標的循環(huán)體還有WHILE,REPEAT等操作方式,他們的操作方式與LOOP類似,都是用來循環(huán)執(zhí)行循環(huán)體里面的內(nèi)容,直到循環(huán)結(jié)束。


當前文章:你知道MySQL中的游標嗎?
URL分享:http://m.5511xx.com/article/cdsidhe.html