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