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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

轉載自https://blog.csdn.net/starinbrook/article/details/77078126

轉載自https://blog.csdn.net/makang456/article/details/53896346/

【簡介】

游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。

游標充當指針的作用。

盡管游標能遍歷結果中的所有行,但他一次只指向一行。

游標的作用就是用于對查詢數據庫所返回的記錄進行遍歷,以便進行相應的操作。

【用法】

一、聲明一個游標: declare 游標名稱 CURSOR for table;(這里的table可以是你查詢出來的任意集合)

二、打開定義的游標:open 游標名稱;

三、獲得下一行數據:FETCH ?游標名稱 into testrangeid,versionid;

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

五、釋放游標:CLOSE 游標名稱;

注:mysql存儲過程每一句后面必須用;結尾,使用的臨時字段需要在定義游標之前進行聲明。

【實例說明】

有兩個表stu_info、stu_info_bak,表結構完全一致,建表腳本如下:

CREATE TABLE `stu_info` (

`stuId` varchar(20) NOT NULL COMMENT '學號',

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

`phone` varchar(11) DEFAULT NULL COMMENT '手機號碼',

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

PRIMARY KEY (`stuId`)

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

CREATE TABLE `stu_info_bak` (

`stuId` varchar(20) NOT NULL COMMENT '學號',

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

`phone` varchar(11) DEFAULT NULL COMMENT '手機號碼',

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

PRIMARY KEY (`stuId`)

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

stu_info表中有幾條數據,stu_info_bak中沒有數據,現在想要把stu_info中的數據全部備份到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)建游標,并存儲數據

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

##游標中的內容執(zhí)行完后將done設置為true

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;

##打開游標

OPEN cur;

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

read_loop : LOOP

##取游標中的值

FETCH cur INTO v_stuId,v_stuName,v_phone,v_idNumber;

##判斷是否結束循環(huán),一定要放到FETCH之后,因為在fetch不到的時候才會設置done為true

##如果放到fetch之前,先判斷done,這個時候done的值還是之前的循環(huán)的值,因此就會導致循環(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;

##釋放游標

CLOSE cur;

END

$$

delimiter;

call `proc_copy_stu_info`();

commit;

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。