sql - 自动递增表列

标签 sql postgresql types auto-increment database-table

使用 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

知道为什么吗?

最佳答案

Postgres 10 或更高版本

(serial 列保持不变,见下文。)

考虑一个标准 SQL IDENTITY 列。可以是GENERATED BY DEFAULT 或(更严格)GENERATED ALWAYS
manual for CREATE TABLE 中的基础知识.
详情在此blog entry by its principal author Peter Eisentraut.

创建包含 IDENTITY 列的表

CREATE TABLE staff (
  staff_id <b>int GENERATED ALWAYS AS IDENTITY</b> PRIMARY KEY
, staff    text NOT NULL
);

添加 IDENTITY 列到现有表

表可能会或可能不会填充行。

ALTER TABLE staff ADD COLUMN staff_id int GENERATED ALWAYS AS IDENTITY;

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

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

参见:

IDENTITY 列替换 serial

参见:

您可以在 INSERT commands with OVERRIDING {SYSTEM|USER} VALUE 中覆盖系统值或用户输入.

Postgres 9.6 或更早版本

(在较新的版本中也仍然受支持。)
使用 serial pseudo data type :

CREATE TABLE staff (
  staff_id <b>serial</b> PRIMARY KEY,
, staff    text NOT NULL
);

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

我使用 legal, lower-case, unquoted identifiers在我的例子中。让您的 Postgres 生活更轻松。

关于sql - 自动递增表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875223/

相关文章:

java - 在jooq的seek api中使用子查询

sql - PostgreSQL:根据数组(外键)列连接 2 个表

Postgresql错误: Corrupt ascii-armor

types - 是否可以在 Common Lisp 中定义递归类型?

c++ - vector 类型值不匹配错误

types - 在 Julia 的方法中传播类型参数

c# - NHibernate 中的 SQL Azure 联合

java - Derby 时间戳比较

sql - Windows Azure SQL 数据库中用户定义的 CLR 数据类型

sql - Postgresql:更新时行号更改