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

如何让表中另一列具备IDENTITY列特性,INSERT时无需显式指定值?

你描述里的插入语句表名test、列名foo应该是笔误,实际对应你创建的foo表和bar字段。

你当前的建表语句已经给insertion_date配置了DEFAULT current_timestamp约束,id是IDENTITY自增列,二者本身都支持插入时不显式传值。你无法直接使用insert into foo values('placeholder')的核心原因是:不带列名的INSERT语句要求传入的值的数量必须和表的总列数完全匹配,你的表总共有3列,只传1个值必然会触发报错。

要实现需求可以用以下两种方案:

方案1:指定插入列名(最推荐)

这是SQL开发的最佳实践,兼容性、可维护性更强,即使后续表结构调整加列,原有插入逻辑也不会受影响,你当前的表结构直接支持该写法,不需要修改任何表配置:

INSERT INTO foo (bar) VALUES ('placeholder');

方案2:强制使用不带列名的插入写法

如果必须使用不带列名的语法,有两种实现方式:

  • 方式A:用DEFAULT关键字给自增、有默认值的列占位,对应插入语句:
INSERT INTO foo VALUES (DEFAULT, 'placeholder', DEFAULT);
  • 方式B:创建仅包含需要手动传值列的视图,后续对视图执行插入:
-- 建视图,仅包含需要手动赋值的bar列
CREATE VIEW v_foo AS SELECT bar FROM foo;
-- 直接对视图插入,不需要指定列名
INSERT INTO v_foo VALUES ('placeholder');

注意

生产环境不建议使用不带列名的INSERT语法,只要后续表结构新增字段,所有这类插入语句都会直接报错,维护成本极高。

内容的提问来源于stack exchange,提问作者David Riscanevo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:03