如何在MySQL中批量插入多行数据?原SQL Server用户求助
替代SQL Server GO语句的MySQL批量插入方法
Hey there! 刚从SQL Server转MySQL确实会遇到不少习惯上的小差异,我当初切换的时候也纠结过这个「重复执行语句」的问题,给你分享几个实用的简便方法:
1. 用存储过程+循环(最接近GO的重复执行逻辑)
如果你就是想重复执行同一条插入语句N次,写个简单的存储过程就能搞定,比如要重复插入300行:
DELIMITER // CREATE PROCEDURE InsertMultipleRows() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 300 DO -- 这里替换成你的插入语句 INSERT INTO your_table (column1, column2) VALUES ('val1', 'val2'); SET i = i + 1; END WHILE; END // DELIMITER ; -- 调用存储过程执行插入 CALL InsertMultipleRows(); -- 如果不需要保留这个存储过程,可以删掉 DROP PROCEDURE InsertMultipleRows;
这个逻辑和GO 300很像,就是循环执行指定的插入语句,适合插入重复内容的场景。
2. 用会话变量+INSERT...SELECT(更简洁,不用存储过程)
如果不想写存储过程,用会话变量配合系统表生成行数是个更轻量的方法,比如:
-- 初始化计数器 SET @row_count = 0; -- 插入300行数据 INSERT INTO your_table (column1, column2) SELECT 'fixed_val1', -- 固定值 CONCAT('dynamic_val_', @row_count := @row_count + 1) -- 也可以生成动态值 FROM information_schema.tables WHERE @row_count < 300;
这里用information_schema.tables是因为这个系统表肯定有足够多的行(远超过300),用来帮我们生成300条记录,不用自己创建临时表,非常方便。
3. 批量VALUES插入(适合插入不同内容的场景)
如果你的300行是不同的数据,那直接用MySQL支持的批量插入语法最高效,比一行一行插快很多:
INSERT INTO your_table (column1, column2) VALUES ('row1_val1', 'row1_val2'), ('row2_val1', 'row2_val2'), -- ... 这里继续写剩下的298行 ('row300_val1', 'row300_val2');
虽然要写300个VALUES组,但MySQL完全支持这种语法,而且执行效率比循环单条插入高不少。
需要注意的是,MySQL没有像SQL Server里GO N那样直接重复执行上一条语句的内置命令,上面这几个方法都是实际工作中常用的替代方案,根据你的数据场景选就行~
内容的提问来源于stack exchange,提问作者Liam Broughton
相关产品推荐
相关产品推荐

