繁体   English   中英

PostgreSQL 9.1主键自动增量

[英]PostgreSQL 9.1 primary key autoincrement

我正在尝试添加一个带有自动增量的主键。

我已经阅读了一些文档和其他问题 - 有SERIALnextval()语句,但它不起作用。

这是我做的:

CREATE TABLE IF NOT EXISTS "category" (
  "id" integer SERIAL PRIMARY KEY,
  "name" varchar(30) DEFAULT NULL
); // the error near "SERIAL"

CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
  "id" integer PRIMARY KEY nextval('your_seq'),
  "name" varchar(30) DEFAULT NULL
); // the error near 'nextval'

我错了什么? 我只想将主键增加1。

serial或多或少是一个列类型所以说integer serial就像说text text ,只说serial

CREATE TABLE IF NOT EXISTS "category" (
  "id" SERIAL PRIMARY KEY,
  "name" varchar(30) DEFAULT NULL
);

如果你想自己创建序列,那么你想让id的默认值成为序列中的下一个值,这意味着说default nextval('your_seq')

CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
  "id" integer PRIMARY KEY default nextval('your_seq'),
  "name" varchar(30) DEFAULT NULL
);

要模拟通常的serial行为,您还需要使表所拥有的序列:

alter sequence your_seq owned by category.id;

阅读本手册的“ 序列类型”部分可能会很有成效。


除非必须,否则我还建议您不要双重引用表和列名。 PostgreSQL会将你的标识符折叠成小写字母,因此id"id"将是同一个东西,但不必要的引用是一个坏习惯,很容易导致各地的大量报价混乱。

如果有人需要修改现有表以添加具有自动增量的主键:

ALTER TABLE table_name ADD COLUMN pk_column_name SERIAL PRIMARY KEY;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM