如何通过单条SQL语句向单列表插入22000条ID数据?
嘿,这个需求完全可以用单条SQL语句搞定,核心思路是批量插入,不过不同数据库的具体写法会有差异,我给你整理几种常用方案:
方案一:通用批量INSERT VALUES写法(适配绝大多数数据库)
这是最直接的方式,把所有ID打包进一个VALUES列表里,语法示例如下:
INSERT INTO your_table_name (id_column) VALUES (1001), (1002), (1003), -- ... 这里依次填入剩下的21997个ID (23000);
需要注意的细节:
- 不同数据库对单条SQL语句的长度有上限,比如MySQL默认的
max_allowed_packet参数如果太小,可能会抛出语句过长的错误,你需要提前确认并调整这个配置;PostgreSQL、SQL Server也有类似的语句长度限制,确保配置能容纳22000个值的语句。 - 务必保证所有ID的格式和表中
id_column的数据类型匹配:如果是整数类型就不用加引号,字符串类型则需要用单引号包裹。
方案二:若ID为连续序列(可简化写法)
如果你的22000个ID是连续的数值(比如从1到22000),那完全不用逐个输入ID,直接用数据库的序列生成功能即可,不同数据库的写法如下:
- PostgreSQL:
INSERT INTO your_table_name (id_column) SELECT generate_series(1, 22000);
- MySQL 8.0+:
可以用内置序列表,或者递归CTE:
-- 方法1:用内置序列表 INSERT INTO your_table_name (id_column) SELECT seq FROM seq_1_to_22000; -- 方法2:递归CTE WITH RECURSIVE id_sequence AS ( SELECT 1 AS id UNION ALL SELECT id + 1 FROM id_sequence WHERE id < 22000 ) INSERT INTO your_table_name (id_column) SELECT id FROM id_sequence;
- SQL Server:
WITH id_sequence AS ( SELECT 1 AS id UNION ALL SELECT id + 1 FROM id_sequence WHERE id < 22000 ) INSERT INTO your_table_name (id_column) SELECT id FROM id_sequence OPTION (MAXRECURSION 0);
额外提示
- 如果你的ID列表来自外部文件(比如CSV),其实用数据库的批量导入工具(比如MySQL的
LOAD DATA INFILE、PostgreSQL的COPY、SQL Server的BULK INSERT)会更高效,但你明确要求单条SQL语句,所以上面的方案更贴合需求。 - 插入前可以临时禁用表的触发器或非必要索引,插入完成后再恢复,能大幅提升22000条数据的插入速度。
内容的提问来源于stack exchange,提问作者Ramon Flores
相关产品推荐
相关产品推荐

