为了账号安全,请及时绑定邮箱和手机立即绑定

自动增量表列

自动增量表列

白衣非少年 2019-06-24 09:41:22
自动增量表列使用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知道为什么吗?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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修正的。详情:

Postgres 9.6或以上

使用serial伪数据类型相反:

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

它自动创建和附加序列对象,并设置DEFAULTnextval()从序列中。它能满足你的需要。

我也用小写标识符以我为例。让你和Postgres的生活更轻松。

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


查看完整回答
反对 回复 2019-06-24
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

但是,在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


查看完整回答
反对 回复 2019-06-24
?
守候你守候我

TA贡献1802条经验 获得超10个赞

在sql server数据库中,可以使用Identity(1,1)就像这样:

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


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 565 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信