PostgreSQL教程

PostgreSQL 序列

在本节中,我们将了解 PostgreSQL序列的工作原理,示例 PostgreSQL序列,并了解该序列的工作方式对象用于创建数字序列,请参见示例 nextval()函数。
我们还看到了创建 升序和降序的示例。使用 CREATE SEQUENCE 命令创建" strong"序列,并在 DROP SEQUENCE 命令的帮助下删除序列。

什么是PostgreSQL序列?

序列是一个生成器,用于创建一个渐进数字,可以帮助自动生成单个 主键,并使各行或表中的键同步。
PostgreSQL 中,序列是用户定义的模式绑定对象,该对象创建一个整数序列,具体取决于
在PostgreSQL序列中,数字的顺序很重要。例如{5,6,7,8,9,10}和{10,9,8,7,6,5}是完全不同的序列。
我们正在使用 CREATE SEQUENCE 命令以在PostgreSQL中生成序列。

PostgreSQL CREATE SEQUENCE命令

PostgreSQL CREATE SEQUENCE 命令用于生成原始序列号生成器,该生成器还包括生成和设置新的名称不同的单行表。 生成器将由对声明有疑问的用户维护。 PostgreSQL序列基于 bigint算术构建;因此,范围-9223372036854775808到922337203685477575807 。而且我们不能超过八字节 的范围 在PostgreSQL中,序列名称必须与相似架构中的任何其他序列,表,视图,索引或外部表不同。 序列是在特定的架构中创建的,如果先前给出了架构名称,则会在现有架构中生成。 生成序列后,我们可以使用 currval,setval和nextval 函数对序列进行操作。 生成临时序列时不能指定方案名称,因为临时序列出现在特殊方案中。

PostgreSQL创建序列命令的语法

PostgreSQL创建序列的语法如下:
CREATE SEQUENCE [ if NOT EXISTS ] sequence_name
    [ AS { SMALLint | int | BIGint } ]
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] 
    [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ] 
    [ CACHE cache ] 
    [ [ NO ] CYCLE ]
    [ OWNED BY { table_name.column_name | NONE } ]
在上面的语法中,我们使用了以下参数:
参数 说明
sequence_name sequence_name与相似架构中的任何其他序列,索引,表,视图或外部表都不同。 我们可以在随后的 CREATE SEQUENCE 中定义序列名称。 IF NOT EXISTS条件仅在不存在新序列时才会尝试生成新序列。
[AS {SMALLINT | INT | BIGINT}] 序列的数据类型,用于调节序列的最大值和最小值。 我们可以定义序列的数据类型,其中支持的数据类型为INT,BIGINT和SMALLINT。 如果我们忘记提及数据类型,则将其视为BIGINT,因为它是Sequence的默认数据类型。
[ INCREMENT [ BY ] increment ] 增量描述值,必须将其添加到现有序列值以生成新值,默认值为1、 此处,正(+)数字将产生一个升序,而负(-)数字将产生一个降序
[ MINVALUE minvalue | NO MINVALUE ][ MAXVALUE maxvalue | NO MAXVALUE ] 如果我们使用 NO MINVALUE和NO MAXVALUE ,则序列将采用默认值。 对于升序,最大默认值为 Sequence数据类型的最大值,而最小最小值值为 1 对于下降顺序,最大默认值为-1 ,并且默认最小值为数据的最小值序列的类型。
[ START [ WITH ] start ] START 条款用于定义序列的起始值。 并且默认初始值为最大值(降序)和最小值(升序)。
cache 可以一次创建一个值,默认情况下,序列会一次不缓存创建一个值。 CACHE参数用于指定预分配的序列总数,并存储在内存中以供较早访问。
CYCLE | NO CYCLE CYCLE参数允许我们在达到限制时恢复该值。 跟随数字将是降序最大值,而升序的最小值顺序。 如果我们使用NO CYCLE,则在达到限制时,或者尝试获取下一个值时,它将在输出中引发错误。 如果我们未定义 CYCLE或NO CYCLE ,则默认为 NO CYCLE
OWNED BY table_name.column_name 最后,使用 OWNED BY参数将表列与序列链接。 因此,PostgreSQL将自动删除相关序列;如果我们删除表格或列。
注意: 当我们为表的列使用SERIAL伪类型时,PostgreSQL在后台自动生成与该列相关的序列。

PostgreSQL创建序列的示例

让我们看看不同的示例以了解 PostgreSQL 创建序列有效。
生成升序的示例
在下面的示例中,以下命令用于 CREATE SEQUENCE 命令,以从 20 生成新的升序 开始 >的 增量 3
CREATE SEQUENCE jtpsequence
INCREMENT 3
START 20;
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 升序已成功创建
PostgreSQL序列
在这里,我们还可以使用 nextval()函数 >从序列中获取下一个值。
SELECT nextval('jtpsequence');
输出
执行上述命令后,我们将获得以下输出,显示序列中的下一个值。
PostgreSQL序列
如果再次执行上述命令,我们将从序列中获得下一个值:
SELECT nextval('jtpsequence');
输出
执行上述命令后,我们将获得以下输出,该输出显示序列中的下一个值。
PostgreSQL序列 生成降序序列的示例
在下面的示例中,以下命令用于使用 cycle 选项从5到1的降序序列:
CREATE SEQUENCE five
INCREMENT-1
MINVALUE 1 
MAXVALUE 5
START 5
CYCLE;
输出
在执行上述命令时,我们将收到以下消息,该消息显示 降序 已成功创建到 Organization 数据库中。
PostgreSQL序列
何时我们将多次执行以下命令,我们将看到该数字从 5,4,3,2,1开始,再回到5,4,3,2,1 ,依此类推:
SELECT nextval('five');
输出
执行上述命令后,我们将获得以下输出,并按降序显示序列中的值。
PostgreSQL序列 创建序列与表格列相关的功能
让我们看一个示例示例,以了解如何创建与表列相关的序列。

第1步: 创建新表

首先,我们在CREATE命令的帮助下以 Purchase_details 的形式创建一个新表,并使用插入命令。
要将 Purchase_details 创建到 组织数据库,我们使用 CREATE 命令。
Purchase_details 表包含各个列,例如 Purchase_id,Module_id ,Module_text和Cost ,其中 Purchase_id和Module_id 列是 主键列。
CREATE TABLE Purchase_details(
    Purchase_id SERIAL,
    Module_id int NOT null,
    Module_text VARCHAR NOT null,
    Cost DEC(10,2) NOT null,
    PRIMARY KEY(Purchase_id, Module_id)
);
输出
在执行上述命令时,我们将收到以下消息,该消息显示 购买详细信息 表已成功创建到 Organization 数据库中。
PostgreSQL序列

第2步: 创建新序列

成功创建 Purchase_details 表后,我们将使用 CREATE创建新序列SEQUENCE 命令,它与 Purchase_details 表的 Module_id 列链接,如以下命令所示:
CREATE SEQUENCE Purchase_module_id
START 5
INCREMENT 5
MINVALUE 5
OWNED BY Purchase_details.Module_id;
输出
执行上述命令后,新序列已成功创建:
PostgreSQL Sequence

Step3: 插入数据

在创建 Purchase_details 表之后并且成功完成了 Purchase_module_id 序列,我们将在 INSERT 命令的帮助下将一些值插入 Purchase_details 表中。
以下命令用于将各种购买行模块插入 Purchase_details 表中。
INSERT INTO 
 Purchase_details(Purchase_id, Module_id, Module_text, cost)
VALUES
    (150, nextval('Purchase_module_id'),'Iphone11 max pro',500),
    (150, nextval('Purchase_module_id'),'Smart LED Tv',650),
    (150, nextval('Purchase_module_id'),'Home theatre',200);
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示三个值已成功插入 Purchase_details 表。
PostgreSQL序列
注意: 在上面的命令中,我们已使用nextval()函数从Purchase_module_id序列中检索Module_id值。

第4步: 检索数据

创建并插入 Purchase_details 表的值之后,我们将使用 SELECT 命令从 中检索数据Purchase_details 表:
SELECT Purchase_id, Module_id, Module_text, Cost
FROM Purchase_details;
输出
成功执行上述命令后,我们将得到以下结果,该结果显示PostgreSQL返回了 中存在的数据Purchase_details 表:
PostgreSQL序列 列出数据库中的所有序列
在以下命令中,我们列出了现有数据库中存在的所有序列:
SELECT relname sequence_name
FROM  pg_class 
WHERE  relkind = 'S';
输出
在执行上述命令时,我们将得到以下结果,该结果显示列出了 Organization 数据库中的所有序列:
PostgreSQL序列 删除序列
一旦删除表,它将自动删除;如果将序列与表列连接,则将删除表的列。
我们可以手动使用 删除序列的DROP SEQUENCE 命令。

删除PostgreSQL序列的语法

删除PostgreSQL序列的语法如下:
DROP SEQUENCE [ if EXISTS ] sequence_name [, ...] 
[ CASCADE | RESTRICT ];
在上面的语法中,我们使用了以下参数:
参数 说明
序列名称 它用于定义要删除的序列的名称。
如果存在 如果需要一次删除多个序列,我们可以使用逗号分隔序列名称的列表。 IF EXISTS 参数会暂时删除该序列(如果存在)。
CASCADE 如果要基于序列递归删除对象,可以使用CASCADE选项。

PostgreSQL DROP SEQUENCE命令示例

要删除 Purchase_details 表,我们使用了 DROP TABLE 命令;同时,序列 Purchase_module_id Purchase_details Module_id 相关。
因此,它也被重复删除,如下面的命令所示:
DROP TABLE Purchase_details;
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 Purchase_details 已成功删除。
PostgreSQL序列

概述

PostgreSQL序列部分中,我们学习了以下主题:
PostgreSQL序列被用作序列对象,用于创建序列列表。 我们已经使用了CREATE SEQUENCE命令来创建新的序列号 在本节中,我们还了解了如何使用 CREATE SEQUENCE 创建升序降序 我们使用了 nextval()函数用于从序列中检索下一个值。 我们还看到了使用 DROP SEQUENCE/DROP TABLE 删除序列的示例
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4