最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Mysql 循环更新

互联网 admin 4浏览 0评论

Mysql 循环更新

使用 存储过程+游标 循环更新大量数据

DROP PROCEDURE IF EXISTS temp_data;/*存在即删除*/DELIMITER //   /*有些数据库默认分号为执行语句结束符号,这里改下结束符号*//*创建临时存储过程*/
CREATE PROCEDURE temp_data()
BEGIN
DECLARE is_done INT DEFAULT 0;/*判断循环结束标识*/
DECLARE tempId CHAR(36);/*每条记录循环时的临时ID*//*定义游标*/
DECLARE namesIds CURSOR FOR SELECT id FROM names where status = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_done = 1;/*上面数据消耗完设置循环结束标志为1 ,即为true*/
OPEN namesIds; /*打开游标*/REPEAT /*开始循环数据*/
FETCH namesIds INTO tempId;
IF NOT is_done THEN
UPDATE record SET nums = (SELECT COUNT(1) FROM history WHERE names_id = tempId)
WHERE 
names_id = tempId;  /*更新语句*/
END IF;
UNTIL is_done END REPEAT;
CLOSE namesIds;  /*CLOSE,释放资源*/
END //DELIMITER ;  /*当创建完一个存储过程之后再将分隔符替换为分号,为了不影响其他的操作*/
CALL temp_data(); /*调用存储过程*/
DROP PROCEDURE temp_data;  /*调用完删掉*/

Mysql 循环更新

使用 存储过程+游标 循环更新大量数据

DROP PROCEDURE IF EXISTS temp_data;/*存在即删除*/DELIMITER //   /*有些数据库默认分号为执行语句结束符号,这里改下结束符号*//*创建临时存储过程*/
CREATE PROCEDURE temp_data()
BEGIN
DECLARE is_done INT DEFAULT 0;/*判断循环结束标识*/
DECLARE tempId CHAR(36);/*每条记录循环时的临时ID*//*定义游标*/
DECLARE namesIds CURSOR FOR SELECT id FROM names where status = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_done = 1;/*上面数据消耗完设置循环结束标志为1 ,即为true*/
OPEN namesIds; /*打开游标*/REPEAT /*开始循环数据*/
FETCH namesIds INTO tempId;
IF NOT is_done THEN
UPDATE record SET nums = (SELECT COUNT(1) FROM history WHERE names_id = tempId)
WHERE 
names_id = tempId;  /*更新语句*/
END IF;
UNTIL is_done END REPEAT;
CLOSE namesIds;  /*CLOSE,释放资源*/
END //DELIMITER ;  /*当创建完一个存储过程之后再将分隔符替换为分号,为了不影响其他的操作*/
CALL temp_data(); /*调用存储过程*/
DROP PROCEDURE temp_data;  /*调用完删掉*/

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论