📜  PostgreSQL – 使用 SERIAL 创建自增列

📅  最后修改于: 2022-05-13 01:57:16.040000             🧑  作者: Mango

PostgreSQL – 使用 SERIAL 创建自增列

在 PostgreSQL 中,序列是一种特殊的数据库对象,它生成一个整数序列。序列通常用作表中的主键列。
SERIAL 伪类型可用于在创建新表时生成序列。

Syntax:
CREATE TABLE table_name(
    id SERIAL
);

在上述语法中,通过将 SERIAL 伪类型设置为id列,PostgreSQL 执行以下操作:

  • 首先,创建一个序列对象,并将序列生成的下一个值设置为该列的默认值。
  • 其次,向 id 列添加一个 NOT NULL 约束,因为序列总是生成一个整数,它是一个非空值。
  • 第三,将序列的所有者分配给id列;因此,当删除 id 列或表时,序列对象将被删除。

上面的语法等价于下面的语句:

CREATE SEQUENCE table_name_id_seq;

CREATE TABLE table_name (
    id integer NOT NULL DEFAULT nextval('table_name_id_seq')
);

ALTER SEQUENCE table_name_id_seq
OWNED BY table_name.id;

PostgreSQL 提供了三种串行伪类型 SMALLSERIAL、SERIAL 和 BIGSERIAL,具有以下特点:

NameStorage SizeRange
SMALLSERIA2 bytes1 to 32, 767
SERIAL4 bytes1 to 2, 147, 483, 647
BIGSERIAL8 bytes1 to 9, 223, 372, 036, 854, 775, 807

现在让我们看一个例子以便更好地理解。
例子:
以下语句创建以id列作为 SERIAL 列animals



CREATE TABLE animals(
   id SERIAL PRIMARY KEY,
   name VARCHAR NOT NULL
);

现在我们将在动物表中插入一个值,如下所示:

INSERT INTO animals(name) 
VALUES('Dog');

我们用不同的值重复上述语句,如下所示:

INSERT INTO animals(name) 
VALUES('Cat');

PostgreSQL 将两行插入到animals表中, id列的值为 1 和 2。要验证,请使用以下语句:

SELECT * FROM animals;

输出:

示例 2:
以下语句将新行插入到animals表中并返回为id列生成的值:

INSERT INTO animals(name) 
VALUES('Tiger')
RETURNING id; 

输出: