使用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 ;

使用方法:

  1. 将上述存储过程复制到MySQL客户端中执行,创建存储过程。
  2. 调用存储过程,传入开始时间和结束时间参数,例如:
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表的结构相同,否则插入操作可能会失败。
  • 在实际应用中,建议先进行测试,确保存储过程能够正常工作后再应用到生产环境。
MySQL存储过程:批量将数据从machine_status_active表插入machine_status_tiny表

原文地址: https://www.cveoy.top/t/topic/qjDw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录