CREATE SEQUENCE
定义新的命名序列号生成器对象。与 AUTO_INCREMENT 和 IDENTITY 序列一样,命名序列允许您设置主键列的默认值。序列保证了唯一性,并避免了约束强制执行问题及开销。
有关序列类型及其用法的详细信息,请参阅序列。
语法
CREATE SEQUENCE [ IF NOT EXISTS ] [[database.]schema.]sequence
[ INCREMENT [ BY ] integer ]
[ MINVALUE integer | NO MINVALUE ]
[ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] integer ]
[ CACHE integer | NO CACHE ]
[ CYCLE | NO CYCLE ]
参数
IF NOT EXISTS
如果存在同名对象,请不要创建它并继续。如果忽略此选项且对象存在,Vertica 将生成 ROLLBACK 错误消息。在上述两种情况下,如果对象已经存在,则不会创建它。
IF NOT EXISTS
子句适用于以下 SQL 脚本:可在某个对象不存在时创建该对象。请参阅 ON_ERROR_STOP 了解相关信息。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
序列
- 标识要创建的序列,其中 sequence 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
-
INCREMENT [BY] integer
一个正整数或负整数,指定每次调用 NEXTVAL 时序列的增减数量,默认设置为 1。
注意
将此参数设置为 integer 时,可确保列值始终至少增加 integer。但是,列值的增量有时可能会超过 integer,但如果您还设置了NO CACHE
参数则除外。-
MINVALUE integer | NO MINVALUE
- 确定序列可生成的最小值。如果忽略此子句或指定 NO MINVALUE(默认值),则将使用默认值:升序序列和降序序列分别为 1 和 ‑263‑1。
-
MAXVALUE integer | NO MAXVALUE
- 确定序列的最大值。如果忽略此子句或指定 NO MAXVALUE(默认值),则将使用默认值:升序序列和降序序列分别为 263‑1 和 ‑1。
-
START [WITH] integer
- 将序列起始值设置为 integer。下一次调用 NEXTVAL 时将返回 integer。如果忽略此子句,则升序序列的起始值将设置为
MINVALUE
,降序序列的起始值将设置为MAXVALUE
。 -
CACHE integer | NO CACHE
- 指定是否在每个节点上缓存唯一的序列号,以便提高访问速度。
CACHE
需要一个整数实参,如下所示:-
>1 指定每个节点在每个会话中缓存的唯一编号的数量。
当心
如果将序列缓存设置为较低的数字,则节点可能会更频繁地请求一组新的缓存值。提供新缓存时,Vertica 必须锁定编录。在 Vertica 释放锁之前,其他数据库活动(例如表插入)会被阻止,这将对整体性能产生不利影响。 -
0 或 1 指定禁用缓存(等同于
NO CACHE
)。
如果忽略此子句,序列缓存将设置为 250,000。
有关命名序列缓存的详细信息,请参阅分发命名序列。
-
CYCLE | NO CYCLE
- 指定序列是否可以在达到其最小值或最大值时回绕:
-
CYCLE
:序列按如下方式进行回绕:-
当递增序列达到其上限时,会被重置为其最小值。
-
当递减序列达到其下限时,会被重置为其最大值。
-
-
NO CYCLE
(默认值):在序列达到其最大值或最小值后,调用 NEXTVAL 会返回错误。
-
特权
非超级用户:对架构的 CREATE 权限
示例
请参阅创建和使用命名序列。