• 沒有找到結果。

15.7.1 全局序列概述

全局序列主要指基于DB的全局序列。

说明

● 支持修改自增序列初始值。

● 全局序列主要保证ID全局唯一,并不能保证一定是连续递增的。

15-31 全局序列支持的表类型

表类型 拆分表 广播表 单表

基于DB的全局序列 支持 支持 不支持

创建自增序列

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 输入命令创建自增序列。

create sequence xxxxx ;

说明

● xxxxx代表序列名。

● 建议使用bigint型作为自增键的数据类型。tinyint、smallint、mediumint、integer、int数 据类型不建议作为自增键的类型,容易越界造成值重复。

----结束

删除自增序列

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 输入命令“show sequences”查看所有序列。

步骤4 输入命令删除序列。

drop sequence xxxxx ; drop sequence DB.xxx;

说明

● 对大小写不敏感。

● 如果序列属于某张表格(即创建这张表时有一列是自增列),不允许删除。

----结束

修改自增序列初始值

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 输入“show sequences”查看所有序列。

步骤4 输入命令修改序列起始值。

alter sequence xxxxx START WITH yyyyy;

说明

● xxxxx代表序列名。

● yyyyy代表目标序列起始值。

----结束

查询自增序列

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 输入命令“show sequences”查看所有序列。

show sequences;

----结束

修改自增序列 Cache

须知

该功能仅支持内核3.0.3以上的版本。

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 输入命令“alter sequence test cache 5000”,修改表test的全局序列的cache值。

步骤4 输入命令“show sequences”,查看test序列的INCREMENT值即是cache值。

----结束

刷新实例所有表自增序列

须知

该功能仅支持内核3.0.4.1以上的版本。

步骤1 使用客户端连接DDM实例。

步骤2 输入命令“fresh all sequence start value”,更改所有逻辑库的所有Sequence。

----结束

15.7.2 nextval、currval 在全局序列的使用

● nextval返回下一个序列值,currval返回当前序列值。其中nextval可以通过 nextval(n)返回n个唯一序列值。

● nextval(n)只能单独用在select sequence.nextval(n)场景下并且不支持跨库操作。

● currval不支持currval(n)的用法。

操作步骤

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 输入命令创建全局序列。

create sequence seq_test;

步骤4 输入命令,返回下一个序列值。

select seq_test.nextval;

步骤5 输入命令,获取当前序列值。

select seq_test.currval;

步骤6 输入命令,批量获取序列值。

select seq_test.nextval(n);

说明

● 批量获取序列值场景不支持跨库操作。

● 未使用过全局序列时,currval的返回值是0。

----结束

15.7.3 全局序列在 INSERT 或 REPLACE 语句中的使用

要想在同一个实例下实现跨逻辑库序列的全局唯一,可以在insert语句或者replace语句 中结合全局序列一起使用。Insert语句和replace语句支持nextval和currval两个方式序 列的获取。其中,nextval表示返回下一个序列值,currval表示返回当前序列值。

可以通过schema.seq.nextval、schema.seq.currval使用,如果不指定schema,默认是 当前连接schema下的全局序列。

支持并发获取全局序列,在多session下并发通过schema.seq.nextval获取全局序列能 够产生唯一值。

用法举例

两个逻辑库dml_test_1、dml_test_2,里面都有表test_seq。

表定义

表定义方法:create table test_seq(col1 bigint,col2 bigint) dbpartition by hash(col1)。

操作步骤

步骤1 使用客户端连接DDM实例。

步骤2 连接成功后,打开目标逻辑库。

步骤3 在库级别下,输入命令创建全局序列。

use dml_test_1;

create sequence seq_test;

步骤4 使用以下语句,实现全局序列在insert语句或者replace语句的使用。

use dml_test_1;

insert into test_seq(col1,col2)values(seq_test.nextval,seq_test.currval);

use dml_test_2;

insert into

test_seq(col1,col2)values(dml_test_1.seq_test.nextval,dml_test_1.seq_test.curr val);

由于全局序列是创建在逻辑库dml_test_1下的,在逻辑库dml_test_2下使用全局序列 需要显式指定逻辑库dml_test_1.seq_test.nextval、dml_test_1.seq_test.currval。

说明

● 全局序列结合insert和replace的使用只支持拆分表,不支持广播表和单表。

● nextval和currval在insert和replace语句中是从左到右执行的,如果一条语句使用同一个全局 序列nextval多次,每出现一次就递增一次。

● 全局序列是属于逻辑库的,删除逻辑库,所在删除逻辑库的全局序列也会被删除。

----结束