将行插入到只有一个主键字段的表中

Posted

技术标签:

【中文标题】将行插入到只有一个主键字段的表中【英文标题】:Insert row into table with only a primary key field 【发布时间】:2015-04-03 07:56:04 【问题描述】:

谷歌搜索告诉我试试这个:

insert into Plan default values;

但我得到了:

null value in column "id" violates not-null constraint

或者这个:

insert into Plan (id) values (null);

但我得到了同样的东西。

这些示例是针对 SQL 的:PostgreSQL 有什么不同吗?

表结构:

  create table Plan (
    id int4 not null,
    primary key (id)
); 

【问题讨论】:

你能展示一下你的表结构吗?! "示例用于 SQL" - 没有意义。 Postgres 使用 SQL。 【参考方案1】:

您的列不接受 NULL 值(定义为 not null),并且您也没有定义默认值。所以您必须提供integer 值:

insert into plan (id) values (1235); -- any integer value

很可能您真的想要一个 serial 列,它从序列中提取默认值:

Auto increment SQL function

您的表格可能如下所示:

CREATE TABLE plan (plan_id serial PRIMARY KEY); 

INSERT 可能是:

INSERT INTO plan DEFAULT VALUES;

【讨论】:

【参考方案2】:

您应该创建一个sequence 并将默认设置为nextval,如下所示:

create sequence plan_sequence
start 100
increment 1
;

  create table plan (
    id int4 not null default nextval('plan_sequence'),
    primary key (id)
); 

序列提供一个自动递增的值。它用于主键等。

【讨论】:

以上是关于将行插入到只有一个主键字段的表中的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将行类型 X 的记录插入行类型 Y 的表中?

从一个表中删除记录并插入到另一个表中

向表中插入多行 - Access

将行从一个链接表插入到另一个链接表

如何在 SQL 服务器中将数据插入到两个不同的表中,同时在 SQL 中具有 ORDER# 主键

如何使用 SSIS 将多个表中的数据插入到多个表中?