小编典典

自动增量表列

sql

使用Postgres,我试图用AUTO_INCREMENTSQL自动编号主键。但是,这给了我一个错误。

CREATE TABLE Staff   (
  ID        INTEGER NOT NULL AUTO_INCREMENT,
  Name      VARCHAR(40) NOT NULL,
  PRIMARY KEY (ID)
);

错误:

********** Error **********
ERROR: syntax error at or near "AUTO_INCREMENT"
SQL state: 42601
Character: 63

知道为什么吗?


阅读 136

收藏
2021-05-05

共1个答案

小编典典

Postgres 10或更高版本

serial列(请参见下文)保持不变。但是考虑一个 IDENTITY 专栏。Postgres10实现了此标准SQL功能。

手册CREATE TABLE中的基本语法和信息。

__用IDENTITY创建

CREATE TABLE staff (
   staff_id **int GENERATED BY DEFAULT AS IDENTITY** PRIMARY KEY
 , staff    text NOT NULL
);

IDENTITY添加 到现有表

表可能填充也可能不填充行。

ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;

同时使它成为PK(表还不能拥有PK):

ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;

有关的:

Postgres 9.6或更旧的版本

(或者,实际上是任何版本。)
改用 serial 伪数据类型

CREATE TABLE staff (
   staff_id **serial** PRIMARY KEY,
 , staff    text NOT NULL
);

它会自动创建并附加序列对象,并从序列中将DEFAULT其设置为nextval()。它可以满足您的所有需求。

在示例中,我使用了小写的标识符。使用Postgres使您的生活更轻松。

2021-05-05