mysql简单使用游标或者sql中的limit实现简单的数据迁移

本文介绍了两种在MySQL中进行数据迁移的方法:一是利用游标逐条迁移数据,二是通过设置LIMIT批量迁移。具体操作以to_test和to_copy两张表为例,详细阐述了存储过程的创建和使用。

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

例如有两张表,一张to_test,一张to_copy,现在需要将to_test表中的两个字段值迁移到to_copy表的两个字段中去
表结构:
to_copyto_test
第一种方法:使用游标逐条迁移

– 创建存储过程:

DROP PROCEDURE IF EXISTS `test2`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `test2`()
BEGIN
	DECLARE v1 INT;
	DECLARE v2 VARCHAR(255);
	DECLARE st INT DEFAULT 0;
	DECLARE num INT DEFAULT 0;

	DECLARE cur1 CURSOR FOR SELECT val,val2 FROM to_test;
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET st=TRUE;

	OPEN cur1;
	
	WHILE st = FALSE DO
		FETCH cur1 INTO v1,v2;
-- SELECT 最后一条会执行两次,插入表时需要控制一下是否结束
			IF !st THEN
				SET num = num +1;
				INSERT INTO to_copy VALUES (v1,v2);
			END IF;
	END WHILE;

	CLOSE cur1;
	SELECT num;

END
;;
DELIMITER ;

第二种:使用limit进行一次多条迁移

– 存储过程,入参为每次迁移条数

DROP PROCEDURE IF EXISTS `test03`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `test03`(IN `inputNum` int)
BEGIN
	-- 总条数
	DECLARE totalCount INT DEFAULT 0;
	-- 偏移量
	DECLARE temp INT DEFAULT 0;
	-- 循环次数
	DECLARE cycle INT DEFAULT 0;
	-- 次数	
	DECLARE count INT DEFAULT 0;
	-- 是否整除,整除为0,不整除为余数
	DECLARE isInt INT DEFAULT 0;

	-- 获取总条数
	SELECT COUNT(*) FROM to_test INTO totalCount;


	-- 如果入参(每次数量)小于总数
	IF inputNum <= totalCount THEN
		SET isInt = totalCount%inputNum;
		SET count = totalCount/inputNum;
		-- 设定总循环次数
		IF isInt != 0 THEN
			SET count = count + 1;
		END IF;
		
		DELETE FROM to_copy;
			WHILE cycle < count DO
				INSERT INTO to_copy (copy1,copy2) SELECT val,val2 FROM to_test LIMIT temp,inputNum;
				SET temp = temp +inputNum;
				SET cycle = cycle + 1;
			END WHILE;
	-- 如果入参大于总数
	ELSE 
		DELETE FROM to_copy;
		INSERT INTO to_copy (copy1,copy2) SELECT val,val2 FROM to_test LIMIT temp,inputNum;
	END IF;

END
;;
DELIMITER ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值