最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql存儲過程之游標(DECLARE)原理與用法詳解

 更新時間:2019年12月26日 10:51:04   作者:luyaran  
這篇文章主要介紹了mysql存儲過程之游標(DECLARE)原理與用法,結(jié)合實例形式詳細分析了mysql存儲過程游標(DECLARE)的基本功能、原理、使用方法及操作注意事項,需要的朋友可以參考下

本文實例講述了mysql存儲過程之游標(DECLARE)原理與用法。分享給大家供大家參考,具體如下:

我們在處理存儲過程中的結(jié)果集時,可以使用游標,因為游標允許我們迭代查詢返回的一組行,并相應地處理每行。mysql的游標為只讀,不可滾動和敏感三種模式,我們來看下:

  • 只讀:無法通過光標更新基礎表中的數(shù)據(jù)。
  • 不可滾動:只能按照select語句確定的順序獲取行。不能以相反的順序獲取行。 此外,不能跳過行或跳轉(zhuǎn)到結(jié)果集中的特定行。
  • 敏感:有兩種游標:敏感游標和不敏感游標。敏感游標指向?qū)嶋H數(shù)據(jù),不敏感游標使用數(shù)據(jù)的臨時副本。敏感游標比一個不敏感的游標執(zhí)行得更快,因為它不需要臨時拷貝數(shù)據(jù)。但是,對其他連接的數(shù)據(jù)所做的任何更改都將影響由敏感游標使用的數(shù)據(jù),因此,如果不更新敏感游標所使用的數(shù)據(jù),則更安全。 MySQL游標是敏感的。

我們可以在存儲過程,存儲函數(shù)和觸發(fā)器中使用MySQL游標,咱們先來看下使用DECLARE語句聲明的語法:

DECLARE cursor_name CURSOR FOR SELECT_statement;

我們要注意下,游標聲明必須在變量聲明之后。如果在變量聲明之前聲明游標,mysql將會發(fā)出一個錯誤,另外游標必須始終與SELECT語句相關聯(lián)。完事呢,我們來使用OPEN語句打開游標。OPEN語句初始化游標的結(jié)果集,因此我們必須在從結(jié)果集中提取行之前調(diào)用OPEN語句:

OPEN cursor_name;

然后,我們來使用FETCH語句來檢索光標指向的下一行,并將光標移動到結(jié)果集中的下一行:

FETCH cursor_name INTO variables list;

之后,我們就可以檢查是否有任何行記錄可用,然后再提取它。完事最后還要記得調(diào)用CLOSE語句來停用光標并釋放與之關聯(lián)的內(nèi)存:

CLOSE cursor_name;

我們要知道,當光標不再使用時,應該關閉它。當我們使用mysql游標時,還必須聲明一個NOT FOUND處理程序來處理當游標找不到任何行時的情況。 因為每次調(diào)用FETCH語句時,游標會嘗試讀取結(jié)果集中的下一行。 當光標到達結(jié)果集的末尾時,它將無法獲得數(shù)據(jù),并且會產(chǎn)生一個條件。NOT FOUND處理程序用于處理這種情況,我們來看下它的語法結(jié)構:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

finished是一個變量,指示光標到達結(jié)果集的結(jié)尾。請注意,處理程序聲明必須出現(xiàn)在存儲過程中的變量和游標聲明之后。我們再來看下mysql游標的運行原理圖:

咱們接下來,就要開發(fā)一個存儲過程用來獲取employees表中所有員工的電子郵件列表。我們先來聲明一些變量,一個用于循環(huán)員工電子郵件的游標和一個NOT FOUND處理程序:

DECLARE finished INTEGER DEFAULT 0;
DECLARE email varchar(255) DEFAULT "";
-- declare cursor for employee email
DEClARE email_cursor CURSOR FOR
 SELECT email FROM employees;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
接下來,使用OPEN語句打開email_cursor:
OPEN email_cursor;

然后,迭代電子郵件列表,并使用分隔符(;)連接每個電子郵件:

get_email: LOOP
 FETCH email_cursor INTO v_email;
 IF v_finished = 1 THEN
 LEAVE get_email;
 END IF;
 -- build email list
 SET email_list = CONCAT(v_email,";",email_list);
END LOOP get_email;

之后,我們在循環(huán)中,使用v_finished變量來檢查列表中是否有任何電子郵件來終止循環(huán),完事呢,使用CLOSE語句關閉游標:

CLOSE email_cursor;

我們來看下build_email_list存儲過程所有代碼:

DELIMITER $$
CREATE PROCEDURE build_email_list (INOUT email_list varchar(4000))
BEGIN
 DECLARE v_finished INTEGER DEFAULT 0;
    DECLARE v_email varchar(100) DEFAULT "";
 -- declare cursor for employee email
 DEClARE email_cursor CURSOR FOR
 SELECT email FROM employees;
 -- declare NOT FOUND handler
 DECLARE CONTINUE HANDLER
    FOR NOT FOUND SET v_finished = 1;
 OPEN email_cursor;
 get_email: LOOP
 FETCH email_cursor INTO v_email;
 IF v_finished = 1 THEN
 LEAVE get_email;
 END IF;
 -- build email list
 SET email_list = CONCAT(v_email,";",email_list);
 END LOOP get_email;
 CLOSE email_cursor;
END$$
DELIMITER ;

我們來使用以下腳本測試build_email_list存儲過程:

SET @email_list = "";
CALL build_email_list(@email_list);
SELECT @email_list;

至于結(jié)果,咱就不贅述了哈。

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

希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。

相關文章

  • Linux下rpm方式安裝mysql教程

    Linux下rpm方式安裝mysql教程

    這篇文章主要為大家詳細介紹了Linux下rpm方式安裝mysql教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • MySQL實現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)

    MySQL實現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)

    在開發(fā)過程中經(jīng)常需要一些測試數(shù)據(jù),?這個時候如果手敲的話,?十行二十行還好,?多了就很死亡了,?接下來介紹兩種常用的MySQL測試數(shù)據(jù)批量生成方式,希望對大家有所幫助
    2023-05-05
  • MySQL日志管理和備份與恢復

    MySQL日志管理和備份與恢復

    這篇文章主要介紹了MySQL如何實現(xiàn)日志的管理,備份與恢復,本文有一定的參考價值,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • windows 10下解壓版MySql安裝配置方法教程

    windows 10下解壓版MySql安裝配置方法教程

    這篇文章主要為大家詳細介紹了windows 10下解壓版MySql安裝配置方法教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Mysql使用簡單教程(三)

    Mysql使用簡單教程(三)

    這篇文章主要介紹了Mysql使用簡單教程(三) 的相關資料,需要的朋友可以參考下
    2016-05-05
  • mysql?WITH?RECURSIVE語法的具體使用

    mysql?WITH?RECURSIVE語法的具體使用

    WITH RECURSIVE是一個用于創(chuàng)建遞歸查詢的語句,本文主要介紹了mysql?WITH?RECURSIVE語法的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 詳解使用navicat連接遠程linux mysql數(shù)據(jù)庫出現(xiàn)10061未知故障

    詳解使用navicat連接遠程linux mysql數(shù)據(jù)庫出現(xiàn)10061未知故障

    這篇文章主要介紹了navicat連接遠程linux mysql數(shù)據(jù)庫出現(xiàn)10061未知故障,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • mysql5.7.20 安裝配置方法圖文教程(win10)

    mysql5.7.20 安裝配置方法圖文教程(win10)

    這篇文章主要為大家詳細介紹了win10下mysql5.7.20 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 詳解MySQL如何使用離線模式維護服務器

    詳解MySQL如何使用離線模式維護服務器

    這篇文章主要為大家介紹了MySQL如何使用離線模式維護服務器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Mysql 建庫建表技巧分享

    Mysql 建庫建表技巧分享

    本文中說到的“建”,并非單純的建一個庫,或是建一張表,而是你建好的庫和表在項目的運營中,是否能應付各種事件,下面我說說幾個我在項目中遇到的問題以及處理的方法,算是一個小小的心得,給大家分享下。
    2011-07-07

最新評論

福州市| 泸水县| 吉林省| 黄龙县| 德保县| 五常市| 申扎县| 临洮县| 双桥区| 嘉定区| 徐闻县| 苗栗市| 昌宁县| 大化| 浦江县| 永川市| 阳西县| 石河子市| 沂源县| 秦安县| 涿州市| 奉化市| 全南县| 巴塘县| 新源县| 吕梁市| 温州市| 五峰| 正定县| 东平县| 琼结县| 游戏| 阳曲县| 阿拉善右旗| 大洼县| 葵青区| 安塞县| 武功县| 呈贡县| 桂平市| 瑞昌市|