CREATE SEQUENCE 语句

使用 CREATE SEQUENCE 语句创建从多个用户生成唯一整数的序列数据库对象。

该语句是 SQL ANSI/ISO 标准的扩展。

语法

元素 描述 限制 语法
max 值的上限 必须为整数 > origin 文字的数值
min 值的下限 必须是小于 origin 的整数 文字的数值
origin 序列中的第一个数字 必须是在 INT8 或 BIGINT 范围内的整数 文字的数值
owner sequence 的所有者 必须是权限标识符 所有者名称
sequence 在这里为新的序列声明的名称 必须在序列、顺序、视图和同义词名称中是唯一的 标识符
size 内存中预分配的值的数目 整数 > 1,但 < 周期 (= |(max - min)/step|) 的基数 文字的数值
step 连续值间的时间间隔 INT 范围内的非零整数 文字的数值

用法

序列(有时称为系列生成器序列对象)返回一系列单调升序或单调降序的唯一整数,一次返回一个。 CREATE SEQUENCE 语句定义新的序列对象,声明其标识符并在 syssequences 系统目录表中注册此对象。

序列已授权的用户可以通过在 DML 语句中包含 sequence.NEXTVAL 表达式来请求新的值。sequence.CURRVAL 表达式返回指定 sequence 的当前值。NEXTVALCURRVAL 表达式只在 SELECT 、DELETE 、INSERT 和 UPDATE 语句中有效;如果尝试在其它上下文中调用内置的 NEXTVALCURRVAL 函数, GBase 8s 将返回一个错误。

生成的值在逻辑上类似 BIGSERIAL 或 SERIAL8 数据类型,但在该序列内是唯一的。因为数据库服务器生成这些值,所以多个序列能比一个序列列支持更高级别的并发性。这些值独立于事务;即使生成值的事务失败,生成的值也不能回滚。

可以使用序列自动生成主键值(为许多表使用一个序列),或者每个表都可以有子句的序列。

CREATE SEQUENCE 可以指定序列的以下特征:
  • 初始值
  • 值间增量的大小和符号
  • 最大和最小值
  • 序列在达到其限制后是否回收值
  • 在内存中预先分配了多少值用于快速存取

数据库可以同时支持多个序列,但是在表、临时表、视图、同义词和序列的名称中当前数据库内序列的名称(或在兼容 ANSI 的数据库中,owner.sequence 组合)必须是唯一的。

如果包含对立选项(如同时指定 MINVALUE 和 NOMINVALUE 选项或同时指定 CACHE 和 NOCACHE),则会发生错误。

如果您包含可选 IF NOT EXISTS 关键字,则当指定名称的序列对象已经在当前数据库中注册时,或者指定的名称是当前数据库中的表、视图或同义词的标识符时,数据库服务器不采取操作(而非向应用程序发送异常)。

示例

以下示例创建了序列,将序列中的值插入到表,并从该表查询了这些行和列。
CREATE SEQUENCE seq_2 
          INCREMENT BY 1 START WITH 1 
          MAXVALUE 30 MINVALUE 0 
          NOCYCLE CACHE 10 ORDER; 
          
          CREATE TABLE tab1 (col1 int, col2 int); 
          INSERT INTO tab1 VALUES (0, 0); 
          
          INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)
          
          SELECT * FROM tab1;
          
          col1        col2
          
          0           0
          1           1
          
        
1 每个关键字选项只能出现一次。