日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql loop循环实例_MySql CURSOR+LOOP循环-使用小实例

發(fā)布時(shí)間:2023/12/9 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql loop循环实例_MySql CURSOR+LOOP循环-使用小实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自https://blog.csdn.net/starinbrook/article/details/77078126

轉(zhuǎn)載自https://blog.csdn.net/makang456/article/details/53896346/

【簡(jiǎn)介】

游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。

游標(biāo)充當(dāng)指針的作用。

盡管游標(biāo)能遍歷結(jié)果中的所有行,但他一次只指向一行。

游標(biāo)的作用就是用于對(duì)查詢(xún)數(shù)據(jù)庫(kù)所返回的記錄進(jìn)行遍歷,以便進(jìn)行相應(yīng)的操作。

【用法】

一、聲明一個(gè)游標(biāo): declare 游標(biāo)名稱(chēng) CURSOR for table;(這里的table可以是你查詢(xún)出來(lái)的任意集合)

二、打開(kāi)定義的游標(biāo):open 游標(biāo)名稱(chēng);

三、獲得下一行數(shù)據(jù):FETCH ?游標(biāo)名稱(chēng) into testrangeid,versionid;

四、需要執(zhí)行的語(yǔ)句(增刪改查):這里視具體情況而定

五、釋放游標(biāo):CLOSE 游標(biāo)名稱(chēng);

注:mysql存儲(chǔ)過(guò)程每一句后面必須用;結(jié)尾,使用的臨時(shí)字段需要在定義游標(biāo)之前進(jìn)行聲明。

【實(shí)例說(shuō)明】

有兩個(gè)表stu_info、stu_info_bak,表結(jié)構(gòu)完全一致,建表腳本如下:

CREATE TABLE `stu_info` (

`stuId` varchar(20) NOT NULL COMMENT '學(xué)號(hào)',

`stuName` varchar(20) NOT NULL COMMENT '姓名',

`phone` varchar(11) DEFAULT NULL COMMENT '手機(jī)號(hào)碼',

`idNumber` varchar(20) DEFAULT NULL COMMENT '身份證號(hào)碼',

PRIMARY KEY (`stuId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='學(xué)生信息';

CREATE TABLE `stu_info_bak` (

`stuId` varchar(20) NOT NULL COMMENT '學(xué)號(hào)',

`stuName` varchar(20) NOT NULL COMMENT '姓名',

`phone` varchar(11) DEFAULT NULL COMMENT '手機(jī)號(hào)碼',

`idNumber` varchar(20) DEFAULT NULL COMMENT '身份證號(hào)碼',

PRIMARY KEY (`stuId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='學(xué)生信息備份';

stu_info表中有幾條數(shù)據(jù),stu_info_bak中沒(méi)有數(shù)據(jù),現(xiàn)在想要把stu_info中的數(shù)據(jù)全部備份到stu_info_bak表中。

【處理腳本】

delimiter $$

drop procedure if exists `proc_copy_stu_info` $$

CREATE PROCEDURE `proc_copy_stu_info`()

BEGIN

##定義變量

DECLARE done INT DEFAULT FALSE;

DECLARE v_stuId VARCHAR(20);

DECLARE v_stuName VARCHAR(20);

DECLARE v_phone VARCHAR(11);

DECLARE v_idNumber VARCHAR(20);

##創(chuàng)建游標(biāo),并存儲(chǔ)數(shù)據(jù)

DECLARE cur CURSOR FOR SELECT stuId,stuName,phone,idNumber FROM stu_info;

##游標(biāo)中的內(nèi)容執(zhí)行完后將done設(shè)置為true

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;

##打開(kāi)游標(biāo)

OPEN cur;

##執(zhí)行循環(huán)

read_loop : LOOP

##取游標(biāo)中的值

FETCH cur INTO v_stuId,v_stuName,v_phone,v_idNumber;

##判斷是否結(jié)束循環(huán),一定要放到FETCH之后,因?yàn)樵趂etch不到的時(shí)候才會(huì)設(shè)置done為true

##如果放到fetch之前,先判斷done,這個(gè)時(shí)候done的值還是之前的循環(huán)的值,因此就會(huì)導(dǎo)致循環(huán)一次

IF done THEN

LEAVE read_loop;

END IF;

## 執(zhí)行SQL操作

SET @sql_insert = CONCAT("insert into stu_info_bak(stuId,stuName,phone,idNumber) VALUES ('",v_stuId,"','",v_stuName,"','",v_phone,"','",v_idNumber,"')");

PREPARE sqlli FROM @sql_insert;

EXECUTE sqlli;

COMMIT;

END LOOP read_loop;

##釋放游標(biāo)

CLOSE cur;

END

$$

delimiter;

call `proc_copy_stu_info`();

commit;

總結(jié)

以上是生活随笔為你收集整理的mysql loop循环实例_MySql CURSOR+LOOP循环-使用小实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。