MySQL是否支持通过乘数字语法批量插入多条相同表数据
结论
MySQL 不支持你写的VALUES (...) * 3这种语法,该写法完全不符合MySQL的SQL规范,执行时会直接报语法错误,无法实现一次性插入3条相同数据的效果。
MySQL的INSERT语法规则中,乘法运算符仅支持数值类表达式计算,不能作用于整行值来实现重复行生成,VALUES关键字后仅允许传入逗号分隔的、和字段一一对应的行值集合。
批量插入重复数据的可行方案
根据需要插入的重复次数,可以选择不同的实现方式:
- 重复次数较少(10次以内):直接在
VALUES后拼接多组相同的行值即可,比如插入3条相同数据的写法为:
INSERT INTO `test`(`name`, `test1`, `other_status`, `status`) VALUES ('string', 'KPrBf9', 1, 0), ('string', 'KPrBf9', 1, 0), ('string', 'KPrBf9', 1, 0);
- 重复次数较多(几十到上百次):可以用递归CTE(MySQL 8.0及以上版本支持)自动生成指定数量的重复行,不需要手动拼接大量重复值,比如插入100条相同数据的写法为:
INSERT INTO `test`(`name`, `test1`, `other_status`, `status`) WITH RECURSIVE num_seq AS ( SELECT 1 AS cnt UNION ALL SELECT cnt + 1 FROM num_seq WHERE cnt < 100 ) SELECT 'string', 'KPrBf9', 1, 0 FROM num_seq;
如果是MySQL 5.x版本不支持CTE,也可以借助内置的系统表(如mysql.help_topic)的自增主键生成连续序号,实现同样的多行生成效果。
- 重复次数极多(千次以上):可以编写存储过程,通过循环语句批量执行插入,性能比纯SQL拼接更好。
内容的提问来源于stack exchange,提问作者Elsa
相关产品推荐
相关产品推荐

