📜  自动递增 psql 不是主键 - SQL (1)

📅  最后修改于: 2023-12-03 15:11:47.504000             🧑  作者: Mango

自动递增 psql 不是主键 - SQL

在 PSQL 数据库中,我们通常希望能够自动递增某个字段,以便每次插入数据时该字段都会自动增加,而不必手动处理该字段的值。这时候我们可以使用 PSQL 中的 SERIAL 类型来实现自动递增。

SERIAL 数据类型

SERIAL 数据类型是 PSQL 中特有的一种数据类型,它会自动递增并生成唯一的序列号作为该字段的值。使用 SERIAL 数据类型定义的字段必须是整数类型。

CREATE TABLE my_table (
    id SERIAL,
    name VARCHAR(50),
    age INTEGER
);

在上述代码中,我们定义了一个名为 my_table 的表,其中包含三个字段,其中 id 字段使用了 SERIAL 数据类型。

不是主键

在使用 SERIAL 数据类型时,很容易把它和主键关联起来,因为它们通常一起使用。但是实际上,使用 SERIAL 数据类型并不意味着该字段就是表的主键,它只是一个自动递增的辅助字段。

也就是说,如果我们将 SERIAL 类型的字段设置为主键,那么每次插入数据时都必须指定该字段的值。例如:

CREATE TABLE my_table (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    age INTEGER
);

在上述代码中,我们将 id 字段设置为表的主键,并使用了 PRIMARY KEY 约束。这意味着每次向该表中插入数据时,都必须手动指定 id 字段的值,否则会报错。

使用默认值

如果将 SERIAL 类型的字段作为辅助字段使用,也就是不设为主键,那么在插入数据时可以忽略该字段,Psql 会将其自动递增并生成唯一的序列号。

例如:

CREATE TABLE my_table (
    id SERIAL,
    name VARCHAR(50),
    age INTEGER
);

在上述代码中,我们定义了一个名为 my_table 的表,其中包含三个字段,其中 id 字段使用了 SERIAL 数据类型并未设为表的主键。

此时,我们向表中插入数据,可以只指定 nameage 字段的值,而不必指定 id 字段的值。例如:

INSERT INTO my_table (name, age) VALUES ('John', 30);

这样 Psql 会自动递增 id 字段的值并生成唯一的序列号作为该记录的 id 字段的值。