Jim*_*mmy 29 sql postgresql types auto-increment database-table
使用Postgres,我试图AUTO_INCREMENT
在SQL中自动编号我的主键.但是,它给了我一个错误.
CREATE TABLE Staff (
ID INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)
错误:
Run Code Online (Sandbox Code Playgroud)********** Error ********** ERROR: syntax error at or near "AUTO_INCREMENT" SQL state: 42601 Character: 63
知道为什么吗?
Erw*_*ter 73
serial
列(见下文)保持不变.但考虑一个IDENTITY
专栏.Postgres 10实现了这个标准SQL功能.
CREATE TABLE staff (
staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
, staff text NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
手册CREATE TABLE
中的基本语法和信息.主要作者Peter Eisentraut的博客文章中的
详细说明.
要添加的IDENTITY
列到预先存在的表(填充有行或不):
ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)
同时也使它成为PK(表还没有PK):
ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;
Run Code Online (Sandbox Code Playgroud)
早期版本中存在一个错误,可能会导致错误消息,例如:
Run Code Online (Sandbox Code Playgroud)ERROR: column "staff_id" contains null values
这与Postgres 10.2一起修复.细节:
改为使用serial
伪数据类型:
CREATE TABLE staff (
staff_id serial PRIMARY KEY,
, staff text NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
它自动创建并附加序列对象,并从序列中设置DEFAULT
to nextval()
.它可以满足您的一切需求.
我在我的例子中也只使用了小写标识符.使Postgres的生活更轻松.
最好使用描述性列名."id"作为名称是反模式,由一些中间件使用,但几乎不具有描述性.与"name"相似.
归档时间: |
|
查看次数: |
46726 次 |
最近记录: |