自动递增SQL函数

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

任何想法为什么?

使用serial伪数据类型 :

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

它自动创建并附加序列对象,并将序列中的DEFAULT设置为nextval() 。 它做你需要的一切。

在我的例子中,我也只使用小写字母标识符 。 使Postgres的生活更轻松。

并更好地使用描述性的列名称。 “id”作为名称是一种反模式,被一些中间件使用,但是很难描述。 类似于“名称”。

您不指定使用哪个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 

在SQL服务器数据库中,可以像这样使用Identity(1,1)

 CREATE TABLE Staff ( ID INT IDENTITY(1,1) NOT NULL, Name VARCHAR(40) NOT NULL, PRIMARY KEY (ID) ); 

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)