You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何为表B每一行在仅含Id列的表A插入默认值记录?

批量插入自动生成Id默认记录的实现方法

场景回顾

  • 表A仅包含Id单列,Id为自动生成(自增/序列/默认值生成),单条插入默认记录的语句为INSERT INTO A DEFAULT VALUES
  • 需求是按表B的总行数,为每一行B表记录对应在A表插入一条Id自动生成的默认记录
  • 常规跨表字段映射插入的写法不适配当前场景,直接写INSERT INTO A SELECT Id FROM B会把B表的Id值写入A表,无法触发Id自动生成,不符合预期

正确写法

标准SQL兼容写法(适配PostgreSQL、SQL Server、SQLite等支持DEFAULT关键字的数据库):

INSERT INTO A (Id)
SELECT DEFAULT FROM B;

针对MySQL等将自增列NULL值触发自动生成作为默认逻辑的数据库,也可使用简写:

INSERT INTO A SELECT NULL FROM B;

逻辑说明

  • 上述写法的执行效果和逐行执行INSERT INTO A DEFAULT VALUES完全一致,最终插入A表的记录数和B表现有总行数相等,所有Id均为新生成的自动值,不会读取、写入B表的Id字段
  • 错误写法的核心问题是SELECT子句返回了B表的Id值,数据库会直接把该值作为A表Id写入,跳过自动生成逻辑

内容的提问来源于stack exchange,提问作者carl kenne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:09:22