使用Postgres,我试图用AUTO_INCREMENTSQL自动编号主键。但是,这给了我一个错误。
AUTO_INCREMENT
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
知道为什么吗?
serial列(请参见下文)保持不变。但是考虑一个 IDENTITY 专栏。Postgres10实现了此标准SQL功能。
serial
IDENTITY
手册CREATE TABLE中的基本语法和信息。
CREATE TABLE
CREATE TABLE staff ( staff_id **int GENERATED BY DEFAULT AS IDENTITY** PRIMARY KEY , staff text NOT NULL );
表可能填充也可能不填充行。
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;
有关的:
(或者,实际上是任何版本。) 改用 serial 伪数据类型:
CREATE TABLE staff ( staff_id **serial** PRIMARY KEY, , staff text NOT NULL );
它会自动创建并附加序列对象,并从序列中将DEFAULT其设置为nextval()。它可以满足您的所有需求。
DEFAULT
nextval()
在示例中,我使用了小写的标识符。使用Postgres使您的生活更轻松。