38

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

知道为什么吗?

4

4 回答 4

90

Postgres 10 或更高版本

serial列(见下文)保持不变。但是考虑一个IDENTITY列。Postgres 10 实现了这个标准的 SQL 特性。

.手册CREATE TABLE中的基本语法和信息。其主要作者 Peter Eisentraut
的此博客条目中的详细解释。

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;

有关的:

替换 serialIDENTITY

看:

Postgres 9.6 或更高版本

(或任何版本,真的。)
改用serial伪数据类型

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

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

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

于 2012-03-26T15:59:37.043 回答
1

您无需指定正在使用的 RDBMS,但是,在 SQL Server 中,您可以使用以下语法:

CREATE TABLE [dbo].[Staff]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(40) NOT NULL,
CONSTRAINT [ID] PRIMARY KEY CLUSTERED 
(
[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
于 2012-03-26T15:47:54.907 回答
0

在 SQL Server 数据库中,您可以Identity(1,1)这样使用:

CREATE TABLE Staff
(
    ID INT IDENTITY(1,1) NOT NULL,
    Name VARCHAR(40) NOT NULL,
    PRIMARY KEY (ID)
);
于 2012-03-26T15:44:11.787 回答
0

PostgreSQL:如果您绝对必须拥有自己的自动增量值:

然后使用一个序列:

ericlesc_schools=> drop table yar;
DROP TABLE
ericlesc_schools=> drop sequence user_id_seq;
DROP SEQUENCE
ericlesc_schools=> create sequence user_id_seq;
CREATE SEQUENCE
ericlesc_schools=> create table yar(
                   id int default nextval('user_id_seq'), 
                   foobar varchar);
CREATE TABLE
ericlesc_schools=> insert into yar (foobar) values('hey alex');
INSERT 0 1
ericlesc_schools=> insert into yar (foobar) values('hey what derick');
INSERT 0 1
ericlesc_schools=> insert into yar (foobar) values('I look like a hushpuppy');
INSERT 0 1

ericlesc_schools=> select * from yar;
 id |     foobar      
----+-----------------
  1 | hey alex
  2 | hey what derick
  3 | I look like a hushpuppy
(3 rows)
于 2015-04-07T03:13:48.007 回答