迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > PostgreSQL >

PostgreSQL 中的自动递增值

作者:迹忆客 最近更新:2023/03/20 浏览次数:

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 文档,你将了解到:

PostgreSQL 文档

当你单击 RUN 时,它将显示以下结果。

输出:

使用 SERIAL 关键字

因此,你可以看到 SERIAL 方法有效地实现了 AUTO_INCREMENT

PostgreSQL 中 SERIAL 及其替代方案的简要工作

SERIAL 关键字生成一个整数列。代替 SERIAL,你也可以使用 SERIAL4,代表 4 个字节。

如果你想要更多标识符或更大范围的自动生成值,你还可以使用 BIGSERIALSERIAL8,最多可容纳 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');

这使用了一个自动附加的序列,例如前面提到的随机生成器。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 PSQL 中运行 SQL 文件

发布时间:2023/03/20 浏览次数:178 分类:数据库

本文解释了如何直接从终端/命令行或 psql shell 运行 SQL 文件。为此,你需要指定主机名、端口、用户名和数据库名称。

在 PostgreSQL 中使用循环

发布时间:2023/03/20 浏览次数:124 分类:PostgreSQL

在 PL/SQL 中,你可能需要在 Postgres 中使用循环。我们可以使用 FOR 和 WHILE 语句来创建循环。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便