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,具有以下特点:
Name | Storage Size | Range |
---|---|---|
SMALLSERIA | 2 bytes | 1 to 32, 767 |
SERIAL | 4 bytes | 1 to 2, 147, 483, 647 |
BIGSERIAL | 8 bytes | 1 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;
输出: