猿问

自动增量表列

自动增量表列

使用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: 42601Character: 63

知道为什么吗?


白衣非少年
浏览 571回答 3
3回答

犯罪嫌疑人X

Postgres 10或更高版本serial列(见下文)保持不变。但考虑一下IDENTITY列。Postgres 10实现了这个标准-SQL特性。CREATE TABLE staff (    staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY  , staff    text NOT NULL);类中的基本语法和信息。手册CREATE TABLE.详细说明主要作者PeterEisentraut的博客条目。到加阿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;早期版本中存在一个错误,可能导致以下错误消息:ERROR: column "staff_id" contains null values这是用Postgres 10.2修正的。详情:如何将PostgreSQL 10标识列添加到有行的现有表中?Postgres 9.6或以上使用serial伪数据类型相反:CREATE TABLE staff (    staff_id serial PRIMARY KEY,  , staff    text NOT NULL);它自动创建和附加序列对象,并设置DEFAULT到nextval()从序列中。它能满足你的需要。我也用小写标识符以我为例。让你和Postgres的生活更轻松。更好地使用描述性列名。“id”作为名称是一种反模式,被一些中间件使用,但并不是描述性的。与“姓名”相似。

拉丁的传说

但是,在SQLServer中,您没有指定使用的是哪个RDBMS,您可以使用以下语法: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 server数据库中,可以使用Identity(1,1)就像这样:CREATE TABLE Staff(     ID INT IDENTITY(1,1) NOT NULL,     Name VARCHAR(40) NOT NULL,     PRIMARY KEY (ID));
随时随地看视频慕课网APP
我要回答