使用Postgres,我试图用AUTO_INCREMENT在SQL中自动为主键编号.然而,它给了我一个错误.

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

知道为什么吗?

推荐答案

博士后10岁或以上

serial列(见下文)保持不变.但是考虑101栏.Postgres 10实现了这一标准SQL功能.

Basic syntax and info in the manual for CREATE TABLE.
Detailed explanation in this blog entry of its primary author Peter Eisentraut.

Create table with IDENTITY column

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

Add IDENTITY column to existing table

表中可能有行,也可能没有行.

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;

相关的:

Replace serial with IDENTITY column

见:

博士后9.6或以上

(Or any version, really.)
Use the serial pseudo data type instead:

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

它会自动创建并附着序列对象,并将序列中的DEFAULT设置为nextval().它能满足你的所有需求.

我在例子中使用了lower case identifiers.让你在博士后的生活更轻松.

Postgresql相关问答推荐

Trunc函数不删除小数

PostgreSQL按描述请求

在Go中,如何在没有数据库包的情况下运行PostgreSQL查询?

在Docker容器内的Postgres,如何通过Promail将JSON登录到Loki?

PostgreSQL:重新创建主键值以匹配记录计数

复合索引列的顺序导致不同的计划

为什么更新不设置较晚的结束时间?

为什么32632投影中的几何图形并不完美?

为什么我的唯一索引在 Postgresql 中不起作用?

postgres vacuum 是否改进了我的查询计划

如何通过 DirectFunctionCall 发送 NULL 参数?

如何从 .sql postgresql 备份恢复单个表?

在 Postgresql 中获取星期几

在 PostgreSQL 中Explain与explain analyze

如何将两个 PostgreSQL 列聚合到一个用括号分隔的数组

当记录包含 json 或字符串的混合时,如何防止 Postgres 中的invalid input syntax for type json

理解 Postgres 行大小

可以为空的列在 PostgreSQL 中是否会占用额外的空间?

带有 WITH 子句的查询时出现 Postgresmissing FROM-clause entry错误

错误:无法在只读事务中执行 CREATE TABLE