<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL中的游標

          共 1967字,需瀏覽 4分鐘

           ·

          2021-11-19 04:57

          點擊關注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設為“置頂或星標”,第一時間送達干貨

          SQL專欄

          SQL基礎知識第二版
          SQL高級知識第二版

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

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

          創(chuàng)建游標
          在創(chuàng)建一個游標前,我們需要先清除游標的語法
          1、定義游標
          DECLARE 游標名稱 CURSOR FOR SQL語句;

          2、打開游標

          OPEN 游標名稱;


          3、獲取結果
          FETCH 游標名稱 INTO 變量名稱[,變量名稱];


          4、關閉游標
          CLOSE 游標名稱;


          我們以Customers表來作為示例


          示例一?
          定義一個存儲過程,調用的時候執(zhí)行里面的游標
          CREATE PROCEDURE PROC1()BEGIN    -- 定義兩個存放結果的變量    DECLARE NAME VARCHAR(20);    DECLARE ADDR VARCHAR(50);    -- 聲明游標    DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers;    -- 打開游標    OPEN MY;    -- 獲取結果    FETCH MY INTO NAME,ADDR;    -- 這里是為了顯示獲取結果    SELECT NAME,ADDR;    -- 關閉游標????CLOSE?MY;????END;
          我們執(zhí)行完上面的存儲過程后,就可以調用該存儲過程了
          CALL?PROC1();
          得到結果:
          這里肯定有小伙伴好奇,customers表里明明有7條記錄,為什么只顯示了1條記錄?
          這是因為游標的變量只保留了customers表中的第一行數(shù)據(jù),如果要查看后面的數(shù)據(jù),就需要循環(huán)往下移動游標,才能繼續(xù)查看。

          示例二
          定義一個存儲過程,調用存儲過程時,將表customers里的數(shù)據(jù)循環(huán)寫入新的表里面。
          CREATE PROCEDURE PROC2()BEGIN    -- 定義兩個存放結果的變量    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 -- 獲取結果 FETCH MY INTO NAME,ADDR; IF FLAG=1 THEN LEAVE L1; END IF; -- 這里是為了顯示獲取結果 INSERT INTO cus VALUES(NAME,ADDR); -- 關閉游標 END LOOP; -- 結束循環(huán) CLOSE MY; END;

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

          CALL?PROC2();SELECT?*?FROM?cus;
          結果:
          結果與customers里的一致,但是這些結果是循環(huán)一條一條往下移動的過程中插入的,即這個循環(huán)執(zhí)行了7次。

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

          以上就是MySQL游標的相關內容,覺得不錯記得幫忙轉發(fā)+在看~


          最后給大家分享我寫的SQL兩件套:《SQL基礎知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。


          有需要的讀者可以下載學習,在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復關鍵字:SQL,就行

          數(shù)據(jù)前線


          后臺回復關鍵字:1024,獲取一份精心整理的技術干貨

          后臺回復關鍵字:進群,帶你進入高手如云的交流群


          推薦閱讀

          瀏覽 64
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本免费一级黄色片 | 欧美一级夜夜爽 | 天天撸,夜夜操 | 影视先锋成人 | 亚洲毛片手机在线观看 |