自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊 MySQL 中的游標

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

[[435403]]

什么是游標?

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

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

創(chuàng)建游標

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

1、定義游標

  1. DECLARE 游標名稱 CURSOR FOR SQL語句; 

2、打開游標

  1. OPEN 游標名稱; 

3、獲取結(jié)果

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

4、關(guān)閉游標

  1. CLOSE 游標名稱; 

我們以Customers表來作為示例

示例一

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

  1. CREATE PROCEDURE PROC1() 
  2. BEGIN 
  3.     -- 定義兩個存放結(jié)果的變量 
  4.     DECLARE NAME VARCHAR(20); 
  5.     DECLARE ADDR VARCHAR(50); 
  6.     -- 聲明游標 
  7.     DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers; 
  8.     -- 打開游標 
  9.     OPEN MY; 
  10.     -- 獲取結(jié)果 
  11.     FETCH MY INTO NAME,ADDR; 
  12.     -- 這里是為了顯示獲取結(jié)果 
  13.     SELECT NAME,ADDR; 
  14.     -- 關(guān)閉游標 
  15.     CLOSE MY;     
  16. END

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

  1. CALL PROC1(); 

得到結(jié)果:

這里肯定有小伙伴好奇,customers表里明明有7條記錄,為什么只顯示了1條記錄?

這是因為游標的變量只保留了customers表中的第一行數(shù)據(jù),如果要查看后面的數(shù)據(jù),就需要循環(huán)往下移動游標,才能繼續(xù)查看。

示例二

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

  1. CREATE PROCEDURE PROC2() 
  2. BEGIN 
  3.     -- 定義兩個存放結(jié)果的變量 
  4.     DECLARE FLAG INT DEFAULT 0;  
  5.     DECLARE NAME VARCHAR(20); 
  6.     DECLARE ADDR VARCHAR(50); 
  7.     -- 聲明游標 
  8.     DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers; 
  9.  
  10.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET FLAG=1; 
  11.     -- 打開游標 
  12.     OPEN MY; 
  13.     -- 循環(huán)體部分 
  14.     L1:LOOP 
  15.     -- 獲取結(jié)果 
  16.     FETCH MY INTO NAME,ADDR; 
  17.     IF FLAG=1 THEN 
  18.        LEAVE L1; 
  19.     END IF; 
  20.     -- 這里是為了顯示獲取結(jié)果 
  21.     INSERT INTO cus VALUES(NAME,ADDR); 
  22.     -- 關(guān)閉游標 
  23.     END LOOP;  -- 結(jié)束循環(huán) 
  24.     CLOSE MY;     
  25. END

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

  1. CALL PROC2(); 
  2.  
  3. 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é)束。

 

責任編輯:武曉燕 來源: SQL數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2023-04-13 08:40:12

MySQL服務器SELECT

2023-11-09 11:56:28

MySQL死鎖

2022-06-29 08:32:04

游標MySQL服務器

2021-06-03 19:13:06

MySQLJson數(shù)據(jù)

2023-06-12 09:09:19

MySQLDDLNSTANT

2021-08-31 07:54:24

SQLDblink查詢

2024-04-26 00:00:00

Rust檢查器代碼

2010-11-16 15:40:21

oracle游標

2022-04-02 10:23:12

MySQL數(shù)據(jù)庫

2022-11-26 08:16:26

2021-03-08 00:11:02

Spring注解開發(fā)

2023-07-28 09:54:14

SQL數(shù)據(jù)Excel

2022-05-11 09:01:54

Swift類型系統(tǒng)幻象類型

2021-10-30 19:56:10

Flutter按鈕 Buttons

2024-04-15 00:00:00

RabbitMQ死信隊列消息

2022-07-04 08:54:39

Swift處理器項目

2021-09-03 06:46:34

SQL分組集功能

2022-08-03 08:11:58

數(shù)據(jù)測試同類型

2021-08-16 08:12:04

SQLMerge用法

2022-04-02 08:14:02

JavaThreadLoca數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號