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表中。

热门文章

优秀文章