AUTO_INCREMENT 使用限制 只有版本≥ 2.3.1的DBProxy实例支持隐式序列功能。 隐式序列必须为非循环序列: 循环序列无法满足AUTOINCREMENT递增且唯一的要求。因此,DRDS创建的隐式序列默认为非循环序列,且不支持修改为循环序列。 隐式序列必须唯一绑定一个表使用: 隐式序列与表应一对一绑定,不能被多个表共用。 禁止手动在其他表中使用已存在的隐式序列。 语法说明 在DRDS中使用隐式序列功能,只需要在创建表时添加autoincrement关键字即可实现,实现过程如下: 1. 创建表的时候添加autoincrement语法,声明某一列为自增主键。 语法示例如下: plaintext CREATE TABLE test ( id bigint(20) NOT NULL AUTOINCREMENT, value int(11) DEFAULT NULL, PRIMARY KEY (id) ) AUTOINCREMENT1000; 2. 系统开始创建分片表,并自动创建一个隐式全局序列。 DRDS将自动为表中的AUTOINCREMENT字段创建一个隐式全局序列,命名为AUTOSEQ ,例如AUTOSEQtest。 初始值AUTOINCREMENT1000将作为该全局序列的起始值,默认每次自增1,即生成的序列为:1000,1001,1002... 说明 默认起始值为1。 3. 向分片表写入数据的过程中,DBProxy自动将SQL语句改写为自带隐式全局序列的形式,保证自增序列全局唯一。 SQL改写示例如下: plaintext 原始SQL INSERT INTO test(value) VALUES(1); 改写后SQL(在DBProxy层完成) INSERT INTO test(id, value) VALUES(autoseqtest.nextval, 1); 该示例表示,在执行INSERT命令插入数据时,DRDS的中间件层(DBProxy)会自动将SQL语句改写为显式带入序列值的形式(改写后的SQL语句自动添加了autoseqtest.nextval关键字),执行该命令时,系统会自动按照当前的隐式全局序列AUTOSEQtest排序情况继续排序。