文档首页/ 分布式数据库中间件 DDM/ 用户指南/ SQL语法/ 全局序列/ 全局序列在INSERT或REPLACE语句中的使用
更新时间:2024-07-30 GMT+08:00

全局序列在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。
  • 逻辑库dml_test_1和dml_test_2中都有表test_seq。

    创建表的方法:

    create table test_seq(col1 bigint,col2 bigint) dbpartition by hash(col1);

操作步骤

  1. 连接DDM实例。

    连接方法具体请参考连接DDM实例

  2. 打开dml_test_1逻辑库。

    use dml_test_1;

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

    create sequence seq_test

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

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

  5. 打开dml_test_2逻辑库。

    use dml_test_2;

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

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

    由于全局序列是创建在逻辑库“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多次,每出现一次就递增一次。
    • 全局序列是属于逻辑库的,删除逻辑库,所在删除逻辑库的全局序列也会被删除。