PostgreSQL 中的自动递增值
-
在 PostgreSQL 中使用
SERIAL
关键字实现AUTO_INCREMENT
-
使用 PostgreSQL
AUTO_INCREMENT
中的GENERATED { BY DEFAULT || ALWAYS} AS
子句
MySQL 中的 Auto_Increment
是一个自增变量,有助于为表中的数据集提供唯一标识。它最常用于 PRIMARY
键中以唯一地索引行。
在 MySQL 中,我们可以将 AUTO INCREMENT
附加到我们想要的任何列。
CREATE TABLE test (
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
但是,今天我们将学习如何在 PostgreSQL 中执行此操作。
在 PostgreSQL 中使用 SERIAL
关键字实现 AUTO_INCREMENT
让我们用一个 id
和一个 color
列制作一个表 CAT
。
create table cat(
id SERIAL,
color varchar not null
);
让我们继续往里面插入一些值。
insert into cat (color) values('black'), ('white'), ('brown'), ('tuxedo');
确保指定 COLUMN_NAME
,以便该函数不会选择所有列并违反 SERIAL
目标。如果你深入研究 PostgreSQL 文档,你将了解到:
当你单击 RUN
时,它将显示以下结果。
输出:
因此,你可以看到 SERIAL
方法有效地实现了 AUTO_INCREMENT
。
PostgreSQL 中 SERIAL
及其替代方案的简要工作
SERIAL
关键字生成一个整数列。代替 SERIAL
,你也可以使用 SERIAL4
,代表 4 个字节。
如果你想要更多标识符或更大范围的自动生成值,你还可以使用 BIGSERIAL
或 SERIAL8
,最多可容纳 2^31
标识符。
SERIAL
方法可以替换为以下内容。
create sequence id_col_AI;
create table cat(
id integer DEFAULT nextval('id_col_AI') NOT NULL,
color varchar not null
);
那么,这里发生了什么?SEQUENCE
定义了一个新的数字生成器。如果你想将 START VALUE
更改为你喜欢的值,你可以在声明的末尾使用 START (your number)
参数。
然后在 ID
列中,将其定义为 DEFAULT
以从列内的生成器中获取下一个值。DEFAULT
倾向于为该列分配除 NULL
之外的默认值。
然后,你参考创建的 SEQUENCE
并调用 NEXTVAL(your seq)
以按顺序获取值。这使得 NOT NULL
可以防止用户隐式或显式插入任何 NULL
。
如果你的表已经创建,你也可以尝试将其扩展到 ALTER TABLE
方法。
ALTER table cat ALTER id set DEFAULT nextval('id_col_AI');
使用 PostgreSQL AUTO_INCREMENT
中的 GENERATED { BY DEFAULT || ALWAYS} AS
子句
你也可以使用以下代码添加自动递增列。
id integer generated by default as identity
我们使用 BY DEFAULT
而不是 ALWAYS
,因为前者倾向于写入用户值,但后者只允许系统指定的值。你也可以使用 ALWAYS
。
在许多系统中,它可能会完美运行。但是,如果使用 ALWAYS
在插入时返回错误,请在 INSERT
子句中附加 OVERRIDING SYSTEM VALUE
以允许用户特定的值。
insert into cat (color) overriding system value
values('black'), ('white'), ('brown'), ('tuxedo');
这使用了一个自动附加的序列,例如前面提到的随机生成器。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub