CREATE SEQUENCE¶
创建一个可用于生成连续的唯一数字的新序列。
重要
Snowflake 无法保证生成的序列号没有间隙。生成的序列号不一定是连续的。
有关更多详细信息,请参阅 使用序列。
语法¶
必填参数¶
name指定序列的标识符;对于创建序列时所在的架构来说,此标识符必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object")。放在双引号内的标识符也区分大小写。有关标识符的更多详细信息,请参阅 标识符要求。
可选参数¶
START [ WITH ] [ = ] initial_value指定序列返回的第一个值。任何可以用 64 位补码整型表示的值(
-2^63至2^63 - 1)均为受支持的值。默认:
1INCREMENT [ BY ] [ = ] sequence_interval指定序列的步进间隔:
对于正序列间隔
n,接下来的n-1个值由每个序列调用保留。对于负序间隔
-n,接下来的n-1个较低值由每个序列调用保留。
支持的值是可以用 64 位二进制补码整型表示的任何非零值。
默认:
1{ ORDER | NOORDER }指定是否按 :ref:` 升序或降序 <label-querying_sequences_increasing_values>` 为序列生成值。
ORDER 指定了为序列或自动递增列生成的值按升序排列(如果间隔为负值,则按降序排列)。
例如,如果序列或自动递增的列具有
START 1 INCREMENT 2,生成的值可能是1、3、5、7、9等。NOORDER 指定不保证值按递增顺序排列。
例如,如果序列中有
START 1 INCREMENT 2,生成的值可能是1、3、101、5、103等。NOORDER 可以在同时执行多个 INSERT 操作时提高性能(例如,在多个客户端执行多个 INSERT 语句时)。
默认:NOORDER_SEQUENCE_AS_DEFAULT 参数确定默认情况下设置的属性。
COMMENT = 'string_literal'指定序列的注释。
默认:无值
访问控制要求¶
权限 |
对象 |
备注 |
|---|---|---|
CREATE SEQUENCE |
架构 |
Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
创建序列后,序列的第一个值/初始值无法更改。
序列不一定产生无间隔序列。值会增加(直到达到限制)并且是唯一的,但不一定连续。有关更多信息(包括上限和下限),请参阅 序列语义。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
OR REPLACE 和 IF NOT EXISTS 子句互斥。它们不能同时用于同一条语句中。
CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
示例¶
以下是使用序列的简单示例:
再次运行相同的查询;注意观察序列号是如何变化的:
现在,在插入到表中时使用序列:
创建一个以 5(而不是 1)递增的序列:
再次运行相同的查询;注意观察序列号是如何变化的。您可能以为下一组序列号的起始值比上一条语句的末尾值高 5。然而,下一个序列号的起始值高出 20(5 * 4,其中 5 是增量的大小,4 是语句中的
NEXTVAL操作数):
此示例演示了可以将序列作为列的默认值,以便为表中的每一行提供唯一的标识符:
此查询显示了表中的每一行都有一个不同的值:
有关更多示例,请参阅 使用序列。