📅  最后修改于: 2020-11-30 01:27:29             🧑  作者: Mango
在本节中,我们将了解PostgreSQL Sequence的工作原理,PostgreSQL Sequence的示例,并了解如何使用sequence对象创建数字序列,并查看示例nextval()函数。
我们还看到了使用CREATE SEQUENCE命令创建升序和降序序列并借助DROP SEQUENCE命令删除序列的示例。
Sequence是一个生成器,用于创建一个渐进式数字,该数字可以帮助自动生成单个主键并在各个行或表之间同步键。
在PostgreSQL中,序列是用户定义的模式绑定对象,它根据特定要求创建整数序列。
在PostgreSQL序列中,数字的顺序很重要。例如{5,6,7,8,9,10}和{10,9,8,7,6,5}是完全不同的序列。
我们正在使用CREATE SEQUENCE命令在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 } ]
在上面的语法中,我们使用了以下参数:
Parameter | Description |
---|---|
sequence_name |
|
[ AS { SMALLINT | INT | BIGINT } ] |
|
[ INCREMENT [ BY ] increment ] |
|
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] |
|
[ START [ WITH ] start ] |
|
cache |
|
CYCLE | NO CYCLE |
|
OWNED BY table_name.column_name |
|
注意:当我们在表的一列中使用SERIAL伪类型时,在后台,PostgreSQL自动生成一个与该列相关的序列。
让我们看不同的示例,以了解PostgreSQL CREATE SEQUENCE的工作方式。
在下面的示例中,以下命令用于CREATE SEQUENCE命令以生成新的升序,从20开始,增量为3 。
CREATE SEQUENCE jtpsequence
INCREMENT 3
START 20;
输出量
执行完上述命令后,我们将获得以下消息窗口,该窗口显示升序已成功创建。
在这里,我们还可以使用nextval()函数从序列中获取下一个值。
SELECT nextval('jtpsequence');
输出量
执行完上述命令后,我们将获得以下输出,显示序列中的下一个值。
如果再次执行上述命令,我们将从序列中获取下一个值:
SELECT nextval('jtpsequence');
输出量
执行完上述命令后,我们将获得以下输出,该输出显示序列中的下一个值。
在下面的示例中,以下命令用于使用cycle选项生成从5到1的降序:
CREATE SEQUENCE five
INCREMENT -1
MINVALUE 1
MAXVALUE 5
START 5
CYCLE;
输出量
执行上述命令后,我们将获得以下消息,该消息显示降序已成功创建到组织数据库中。
当我们多次执行以下命令时,我们将看到该数字从5,4,3,2,1开始,再回到5,4,3,2,1,依此类推:
SELECT nextval('five');
输出量
执行完上面的命令后,我们将获得以下输出,以降序显示序列中的值。
让我们看一个示例示例,以了解如何创建与表列相关的序列。
首先,我们将在CREATE命令的帮助下创建一个新表,作为Purchase_details并使用INSERT命令插入一些值。
要在组织数据库中创建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)
);
输出量
执行上述命令后,我们将获得以下消息,该消息显示Purchase_details表已成功创建到Organization数据库中。
成功创建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;
输出量
执行上述命令后,新序列已成功创建:
成功创建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表中。
注意:在上面的命令中,我们使用nextval()函数从Purchase_module_id序列中检索Module_id值。
创建并插入Purchase_details表的值之后,我们将使用SELECT命令从Purchase_details表中检索数据:
SELECT Purchase_id, Module_id, Module_text, Cost
FROM Purchase_details;
输出量
成功执行上述命令后,我们将获得以下结果,该结果显示PostgreSQL返回Purchase_details表中存在的数据:
在以下命令中,我们列出了现有数据库中存在的所有序列:
SELECT relname sequence_name
FROM pg_class
WHERE relkind = 'S';
输出量
实施上述命令后,我们将获得以下结果,该结果显示列出组织数据库中的所有序列:
一旦删除了表,它将自动删除;如果将序列与表列连接,则将删除表的列。
可以手动使用DROP SEQUENCE命令删除序列。
删除PostgreSQL序列的语法如下:
DROP SEQUENCE [ IF EXISTS ] sequence_name [, ...]
[ CASCADE | RESTRICT ];
在以上语法中,我们使用了以下参数:
Parameters | Description |
---|---|
Sequence_name |
|
If EXISTS |
|
CASCADE |
|
要删除Purchase_details表,我们使用了DROP TABLE命令;同时,序列Purchase_module_id与Purchase_details的MODULE_ID连接。
因此,它也会被重复删除,如下面的命令所示:
DROP TABLE Purchase_details;
输出量
执行完上述命令后,我们将获得以下消息窗口,该窗口显示Purchase_details已成功删除。
在“ PostgreSQL序列”部分中,我们学习了以下主题: