mysql数据库表新增100W条数据的存储过程
时间: 2024-10-28 12:06:32 浏览: 8
在MySQL中,创建一个用于一次性插入一百万条数据的存储过程并不常见,因为一次性处理大量数据可能会导致性能问题,比如内存溢出或者长时间的事务阻塞。通常我们会采用批量插入的方式来提高效率。以下是创建一个分批插入示例的简单存储过程:
```sql
DELIMITER //
CREATE PROCEDURE InsertDataInBatches (IN data_file TEXT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE i INT DEFAULT 0;
DECLARE record LONGBLOB;
OPEN DATA_FILE CURSOR FOR
SELECT * FROM TSV_DATA; -- 假设你的数据源在一个名为TSV_DATA的数据表里
REPEAT
SET @query = CONCAT('INSERT INTO your_table (column1, column2,...) VALUES ', GROUP_CONCAT(REPLACE(record, '\n', ', ')));
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF NOT done THEN
FETCH DATA_FILE INTO record;
SET i = i + 1;
IF i >= 10000 THEN
SET done = TRUE; -- 这里设定每批次插入10000行
COMMIT; -- 提交一次事务,释放资源然后再继续下一批次
END IF;
ELSE
CLOSE DATA_FILE;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insertion finished';
END IF;
UNTIL done END REPEAT;
END; //
DELIMITER ;
```
在这个存储过程中,我们假设`data_file`是一个文件,其中包含按照逗号分隔的记录。你需要将`your_table`替换为你的目标表名,`column1`, `column2`, ...替换为实际的列名。
要运行这个过程,你可以使用`CALL InsertDataInBatches('/path/to/your/data.txt')`,其中'/path/to/your/data.txt'是你存放数据的文件路径。
阅读全文