PostgreSQL Identity Column自增列
在本节中,我们将了解PostgreSQL IDENTITY 和 GENERATED 约束的工作原理,它们用于为特定列生成 PostgreSQL Identity 列,更改 Identity 列的示例,并通过示例了解Sequence 选项的工作原理。
我们还将看到向当前表添加标识列的示例,并使用ALTER TABLE命令修改标识列以删除GENERATED AS IDENTITY约束。
什么是 PostgreSQL Identity Column?
从PostgreSQL版本 10 开始,PostgreSQL 开发人员宣布了一个名为GENERATED AS IDENTITY的新约束,用于自动为列分配唯一编号。
PostgreSQL Identity Column的语法
PostgreSQL GENERATED AS IDENTITY 约束的语法如下:
column_name type GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY[ ( sequence_option ) ]
在上面的语法中,我们有以下几点,在实时示例中使用时需要记住:
- 类型参数可以是SMALLINT 、INT或BIGINT。
- GENERATED ALWAYS用于要求 PostgreSQL 不断地为标识列创建一个值。
- 如果我们尝试更新或将值插入GENERATED ALWAYS AS IDENTITY 列,PostgreSQL 将发生错误。
- 但是如果我们为插入或更新提供一个值,GENERATED BY DEFAULT用于告诉 PostgreSQL 为标识列创建一个值。
- 为了使用系统生成的值,PostgreSQL 将使用特定的值插入标识列。
PostgreSQL Identity Column的示例
让我们通过不同的示例来了解PostgreSQL Identity Column的工作原理。
GENERATED ALWAYS的示例
我们正在使用 CREATE 命令的帮助创建一个新表作为Vegetable ,并使用 INSERT 命令插入一些值。
要将Vegetable创建到Organization 数据库中,我们使用CREATE命令。
Vegetable表包含两列,例如veggie_id 和 Veggie_name列,其中我们使用Veggie_id作为标识列:
CREATE TABLE Vegetable (
Veggie_id INT GENERATED ALWAYS AS IDENTITY,
Veggie_name VARCHAR NOT NULL
);
执行上面的命令,我们会得到如下信息,显示Vegetable表已经成功创建到Organization数据库中。
成功创建Vegetable表后,我们将在 INSERT 命令的帮助下向其中插入一些值。
INSERT INTO Vegetable(veggie_name)
VALUES ('Sweet Potato');
执行上述命令后,我们会得到如下消息窗口,显示一个值已经成功插入到Vegetable表中。
我们知道Veggie_id列具有GENERATED AS IDENTITY 约束,这就是 PostgreSQL 为其创建值的原因,正如我们在以下命令中看到的那样:
SELECT * FROM Vegetable;
成功执行上述命令后,我们将得到以下输出,其中显示了Vegetable表中存在的所有数据:
现在,我们将通过为 Veggie_id 和 Veggie_name 列提供值来插入一个新行:
INSERT INTO Vegetable(Veggie_id, Veggie_name)
VALUES (2,'Carrot');
执行上述命令后,Postgresql 引发以下错误:we cannot insert the value into the veggie_id column because the Veggie_id column is an identity column and described as GENERATED ALWAYS。
我们可以在以下命令中使用OVERRIDING SYSTEM VALUE子句来解决上述错误:
INSERT INTO Vegetable(Veggie_id, Veggie_name)
OVERRIDING SYSTEM VALUE
VALUES(2, 'Carrot');
执行上述命令后我们会得到如下消息窗口,显示指定的值已经成功插入到Vegetable表中。
热门文章
优秀文章