PostgreSQL Serial17 Mar 2025 | 5 分钟阅读 在本节中,我们将了解 PostgreSQL Serial 伪类型的工作原理,它允许我们在表中定义 自动增量列。我们还将了解 PostgreSQL Serial 伪类型 的示例。 什么是 PostgreSQL Serial 伪类型?在 PostgreSQL 中,我们有一种特殊的数据库对象生成器,称为 Serial,用于创建整数序列,该序列通常用作表中的主键。 在创建新表时,我们可以使用 SERIAL 伪类型 来生成序列,如下面的命令所示: 如果我们将 SERIAL 伪类型 提供给 ID 列,PostgreSQL 将执行以下操作:
注意:我们可以使用这两种命令来指定 Serial 伪类型,因为以下两种命令是相似的。PostgreSQL Serial 伪类型 分为三种类型,如下所示:
下表包含 PostgreSQL 支持的所有 Serial 伪类型 规范:
PostgreSQL Serial 伪类型语法PostgreSQL Serial 伪类型 的语法如下: PostgreSQL SERIAL 类型示例让我们通过不同示例来了解 PostgreSQL Serial 伪类型 的工作原理。 注意:我们可以为 SERIAL 列定义 PRIMARY KEY 约束,因为 SERIAL 类型不会间接为列创建索引或将列设为主键列。我们将使用 CREATE 命令创建一个新表,并使用 INSERT 命令插入一些值。 在下面的示例中,我们使用 CREATE 命令在 Organization 数据库 中创建一个 Cars 表: 输出 执行上述命令后,Cars 表已成功创建,如下图所示: ![]() 一旦 Cars 表生成,我们就可以使用 INSERT 命令向其中插入一些值。我们可以在 INSERT 命令中使用 DEFAULT 关键字,或者省略列名 (Car_id)。 输出 执行上述命令后,我们将收到以下消息,表示值已成功插入到 Cars 表中: ![]() 或 使用带列名 (Car_id) 的 DEFAULT 关键字: 输出 执行上述命令后,我们将收到以下消息;值已成功插入到 Cars 表中: ![]() 从上图可以看出,PostgreSQL 在 Cars 表中插入了两行,Car_id 列的值分别为 1 和 2。 在创建并插入 Cars 表的值后,我们将使用 SELECT 命令返回 Cars 表的所有行。 输出 成功执行上述命令后,我们将得到以下结果: ![]() 我们可以使用 pg_get_serial_sequence() 函数来获取指定表中 SERIAL 列的序列名称,如下面的语法所示: 要获取序列生成的当前值,我们可以将序列名称传递给 currval() 函数。 在下面的示例中,我们使用 currval() 函数返回 Cars 表 Car_id_seq 对象生成的当前值: 输出 在实现上述命令后,我们将获得以下输出 ![]() 如果我们想在插入新行时获取序列生成的值,可以在 INSERT 命令中使用 RETURNING Car_id 子句。 下面的命令用于向 Cars 表插入一行新数据,并返回为 Car_id 列生成的数据。 输出 执行上述命令后,我们将得到以下输出,它返回 Car_id 为 3: ![]() 注意
示例 2让我们再看一个例子来详细了解 Serial 伪类型。 因此,我们将使用 CREATE 命令在与 Organization 相同的数据库中创建一个名为 Vegetables 的新表,并将 Veg_id 列设置为 SERIAL 伪类型。 输出 执行上述命令后,Vegetables 表已成功创建,如下图所示: ![]() 一旦 Vegetables 表生成,我们将使用 INSERT 命令向其中插入一些值,并忽略 Veggies_id 列,如下面的命令所示: 输出 执行上述命令后,我们将收到以下消息:值已成功插入到 Vegetables 表中。 ![]() 或者,我们也可以使用 Default 关键字,并使用 Veggie_id 列,如下面的命令所示: 输出 执行上述命令后,我们将得到以下消息,它说明我们可以使用 Default 关键字 或忽略列名,结果会相似: ![]() 因此,我们将使用以下命令向 Cars 表添加更多值: 输出 执行上述命令后,我们将得到以下消息,显示值已成功插入到 Vegetables 表中。 ![]() 在创建并插入 Vegetables 表的值后,我们将使用 SELECT 命令返回 Vegetables 表的所有行。 输出 成功执行上述命令后,我们将得到以下输出: ![]() 概述在 PostgreSQL Serial 伪类型 部分,我们学习了 Serial 伪类型功能,它主要用于为特定表创建自动增加的列值。 下一个主题PostgreSQL 日期 |
我们请求您订阅我们的新闻通讯以获取最新更新。