偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

聊聊 MySQL 中的游標(biāo)

數(shù)據(jù)庫(kù) MySQL 服務(wù)器
游標(biāo)(cursor)是一個(gè)存儲(chǔ)在MySQL服務(wù)器上的數(shù)據(jù)庫(kù)查詢, 它不是一條SELECT語(yǔ)句,而是被該語(yǔ)句檢索出來(lái)的結(jié)果集。在存儲(chǔ)了游 標(biāo)之后,應(yīng)用程序可以根據(jù)需要滾動(dòng)或?yàn)g覽其中的數(shù)據(jù)。

[[435403]]

什么是游標(biāo)?

游標(biāo)(cursor)是一個(gè)存儲(chǔ)在MySQL服務(wù)器上的數(shù)據(jù)庫(kù)查詢, 它不是一條SELECT語(yǔ)句,而是被該語(yǔ)句檢索出來(lái)的結(jié)果集。在存儲(chǔ)了游 標(biāo)之后,應(yīng)用程序可以根據(jù)需要滾動(dòng)或?yàn)g覽其中的數(shù)據(jù)。

注意:MySQL游標(biāo)只能用于 存儲(chǔ)過(guò)程(和函數(shù))。

創(chuàng)建游標(biāo)

在創(chuàng)建一個(gè)游標(biāo)前,我們需要先清除游標(biāo)的語(yǔ)法

1、定義游標(biāo)

  1. DECLARE 游標(biāo)名稱 CURSOR FOR SQL語(yǔ)句; 

2、打開游標(biāo)

  1. OPEN 游標(biāo)名稱; 

3、獲取結(jié)果

  1. FETCH 游標(biāo)名稱 INTO 變量名稱[,變量名稱]; 

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

  1. CLOSE 游標(biāo)名稱; 

我們以Customers表來(lái)作為示例

示例一

定義一個(gè)存儲(chǔ)過(guò)程,調(diào)用的時(shí)候執(zhí)行里面的游標(biāo)

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

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

  1. CALL PROC1(); 

得到結(jié)果:

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

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

示例二

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

  1. CREATE PROCEDURE PROC2() 
  2. BEGIN 
  3.     -- 定義兩個(gè)存放結(jié)果的變量 
  4.     DECLARE FLAG INT DEFAULT 0;  
  5.     DECLARE NAME VARCHAR(20); 
  6.     DECLARE ADDR VARCHAR(50); 
  7.     -- 聲明游標(biāo) 
  8.     DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers; 
  9.  
  10.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET FLAG=1; 
  11.     -- 打開游標(biāo) 
  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)閉游標(biāo) 
  23.     END LOOP;  -- 結(jié)束循環(huán) 
  24.     CLOSE MY;     
  25. END

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

  1. CALL PROC2(); 
  2.  
  3. SELECT * FROM cus; 

結(jié)果:

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

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

 

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

2023-04-13 08:40:12

MySQL服務(wù)器SELECT

2023-11-09 11:56:28

MySQL死鎖

2022-06-29 08:32:04

游標(biāo)MySQL服務(wù)器

2021-06-03 19:13:06

MySQLJson數(shù)據(jù)

2024-04-26 00:00:00

Rust檢查器代碼

2021-08-31 07:54:24

SQLDblink查詢

2023-06-12 09:09:19

MySQLDDLNSTANT

2021-08-16 06:56:21

Slice數(shù)組類型內(nèi)存

2022-04-02 08:14:02

JavaThreadLoca數(shù)據(jù)

2021-11-09 06:55:03

SQLServer排序

2021-12-11 19:00:54

Java中斷機(jī)制

2023-08-29 09:46:12

SQLCTE遞歸

2022-04-02 10:23:12

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

2010-11-16 15:40:21

oracle游標(biāo)

2022-11-26 08:16:26

2021-10-30 19:56:10

Flutter按鈕 Buttons

2022-05-11 09:01:54

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

2023-07-28 09:54:14

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

2021-03-08 00:11:02

Spring注解開發(fā)

2024-04-15 00:00:00

RabbitMQ死信隊(duì)列消息
點(diǎn)贊
收藏

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