mysql游标遍历循环 插入数据

本文通过一个实例解释了如何使用MySQL游标遍历循环插入数据。通过创建存储过程,遍历查询结果,将特定记录复制到每个学生,实现数据的批量复制。涉及的关键点包括游标声明、变量使用以及异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BEGIN
 DECLARE  no_more_record INT DEFAULT 0;
 DECLARE  insertColumn VARCHAR(18);
 DECLARE  cur_record CURSOR FOR   SELECT insertParam FROM testTable;  
 DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1; 
 OPEN  cur_record; 
 FETCH  cur_record INTO insertColumn; 
  WHILE no_more_record != 1 DO
  IF NOT  EXISTS(SELECT column1 FROM insertTable WHERE column1=insertColumn) THEN 
  INSERT  INTO  insertTable 
  SELECT insertColumn,colunm2,column3,colunm4 WHERE column1='123';
END IF;
 FETCH  cur_record INTO insertColumn;
 END WHILE;
 CLOSE  cur_record;
END

以上代码实现的功能:为testTable字段每个insertParam添加insertTable中column1=‘123’对应的所有记录。

如果这句话比较难懂的话,可以想象以下情景:

一个班级(学生表)有小明,小刚,小红三名同学,

小明同学有苹果,橘子,梨(学生-资源表)。

现在要求所有学生都有这三种水果,也就是遍历学生表,再把小明拥有的资源复制给每个学生一份。最后学生-资源表中所有学生都对应三个水果。

以上代码完成的就是上述情景描述的功能。

一.变量说明

1.no_more_record:用来判断查询结果集是否已遍历完;

2.continue:用来给no_more_record赋值,no_more_record初始值0,遍历完1;

3.cur_record:游标,指向结果集当前遍历记录

4.insertColumn:作为临时变量,每次遍历结果集时,把当前遍历值赋给它,用于做插入参数;

6.insertTable:被插入表

5.colunm1:用于与insertColumn比较,判断被插入表中是否有值重复的字段。

二.语句(关键字)说明

1.DECLARE:声明变量。后面跟着变量类型(广义上的类型,比如游标类型)

2.CURSOR FOR + 查询语句:游标指向查询结果集

3.FETCH+游标+INTO+变量:当前游标指向的值赋给变量,同时游标后移

4.HANDLER FOR NOT FOUND SET+处理语句:遍历集合结束后的处理 

三.注意

使用mysql数据库时,这种写法只能放在存储过程/方法里,不可直接写成查询语句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值