MySQL存储过程:批量将数据从machine_status_active表插入machine_status_tiny表
使用MySQL存储过程批量插入数据到新表
本文将演示如何使用MySQL存储过程,将machine_status_active表中指定时间范围内的记录批量插入到machine_status_tiny表,每次插入10万条数据。假设两张表结构相同,都包含一个created_time创建时间字段。
存储过程代码:
DELIMITER //
CREATE PROCEDURE insert_data_to_tiny(IN start_time DATETIME, IN end_time DATETIME)
BEGIN
DECLARE total_rows INT;
DECLARE current_rows INT;
DECLARE batch_size INT DEFAULT 100000;
SELECT COUNT(*) INTO total_rows FROM machine_status_active WHERE created_time BETWEEN start_time AND end_time;
SET current_rows = 0;
WHILE current_rows < total_rows DO
INSERT INTO machine_status_tiny
SELECT *
FROM machine_status_active
WHERE created_time BETWEEN start_time AND end_time
LIMIT current_rows, batch_size;
SET current_rows = current_rows + batch_size;
END WHILE;
END //
DELIMITER ;
使用方法:
- 将上述存储过程复制到MySQL客户端中执行,创建存储过程。
- 调用存储过程,传入开始时间和结束时间参数,例如:
CALL insert_data_to_tiny('2022-01-01 00:00:00', '2022-01-02 00:00:00');
这将会将machine_status_active表中2022年1月1日的数据插入到machine_status_tiny表中,每次插入10万条数据,直到所有符合条件的数据都被插入到machine_status_tiny表中。
说明:
- 该存储过程通过循环的方式,每次从
machine_status_active表中获取10万条数据插入到machine_status_tiny表。 - 使用
LIMIT子句控制每次插入数据的数量,可以避免一次性插入大量数据导致性能问题。 - 可以根据实际情况调整
batch_size参数值,以优化插入效率。
注意:
- 请确保
machine_status_tiny表的结构与machine_status_active表的结构相同,否则插入操作可能会失败。 - 在实际应用中,建议先进行测试,确保存储过程能够正常工作后再应用到生产环境。
原文地址: https://www.cveoy.top/t/topic/qjDw 著作权归作者所有。请勿转载和采集!