PostgreSQL AUTO INCREMENT(自动增长)


PostgreSQL AUTO INCREMENT

在 PostgreSQL 中,我们可以通过 AUTO INCREMENT (自动增长) 来自动为主键列生成连续的唯一值。主键是一列或者列组合,用于唯一标识数据表中每一行的记录。

在创建表的时候,可以使用 SERIAL 或者 BIGSERIAL 类型来为主键列添加自动增长属性。

SERIAL

SERIAL 类型是 PostgreSQL 中专门为自动增长设计的数据类型,它实际上是 INTEGER 类型的别名。定义 SERIAL 类型的列时,数据库会自动为该列创建序列,然后将序列的下一个值作为默认值赋给该列。

例如,以下 SQL 语句创建了一个包含 id 和 name 两个字段的 users 表,其中 id 为 SERIAL 类型,表示自动增长的整数:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50)
);

通过上述语句创建的 users 表中,每次插入数据时,如果未指定 id 列的值,则自动从序列中获取一个唯一的整数作为 id。

BIGSERIAL

BIGSERIAL 类型也是 PostgreSQL 中专门为自动增长设计的数据类型,它实际上是 BIGINT 类型的别名。

与 SERIAL 类型类似,定义 BIGSERIAL 类型的列时,数据库会自动为该列创建序列,然后将序列的下一个值作为默认值赋给该列。下面是一个使用 BIGSERIAL 类型的例子:

CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(50)
);

自定义初始值和步长

默认情况下,序列值从 1 开始,步长为 1。如果需要自定义初始值和步长,可以使用以下语法:

CREATE TABLE users (
    id SERIAL PRIMARY KEY START WITH 1000 INCREMENT BY 5,
    name VARCHAR(50)
);

上述语句创建一个包含 id 和 name 两个字段的 users 表,其中 id 的初始值为 1000,每次自增 5。

插入数据时自动生成主键

使用自动增长主键时,插入数据时不必为主键字段指定值。例如,以下语句将向表 users 中插入一条数据,此时会自动为 id 列自动分配一个唯一的值。

INSERT INTO users (name) VALUES ('David');

总结

PostgreSQL 中的自动增长主键功能可以非常方便地为表的主键字段添加唯一值,避免了手工编写复杂的唯一值创建逻辑的复杂性。使用 SERIAL 和 BIGSERIAL 数据类型可以非常简单地实现自动增长功能,同时在这些数据类型的基础上,还可以通过自定义初始值和步长,实现更灵活的自动增长逻辑。