AUTO_INCREMENT自增列
功能描述
Vastbase G100在MySQLl兼容模式下支持 auto_increment语法,用于生成自增列,一般出现在创建表语句和修改表语句中。
注意事项
- 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
- 一张表只允许存在一个auto_increment字段。
- auto_increment字段必须是主键字段或联合主键字段之一。
- 对表插入数据时,若指定了auto_increment字段的值,且该值大于表中该自增列的最大值时,需要更新自增列的下一个值为当前插入数据值加1。
- Vastbase G100 V2.2 Build 10在含有自增列的表中仅支持INSERT单行数据,暂不支持INSERT多行和
INSERT…SELECT
。Vastbase G100 V2.2 Build 11及之后版本在含有自增列表中支持INSERT多行数据。 - 对表插入数据时,若指定auto_increment字段为NULL或0,则依旧触发自增机制。
- 在MySQL兼容模式下,Serial类型字段与auto_increment类型字段特性一致。
- 自增列可以插入负值或更新负值。
- 自增列的值被更新后无法回退,即使其所在的事务后续回滚依旧如此。多个session并发插入时应保证可用性,需要慎重考虑插入操作导致自增值更新所带来的后果。
修改表语句
- MySQL兼容模式下一张表只允许存在一个auto_increment字段,数据库会自动找到对应字段,修改其自增属性。
- 修改语句与插入语句都可能改变下一个自增值,需要加锁。
- Vastbase G100仅支持修改普通表和分区表的auto_increment属性。不支持物化视图,复合类型等其他类型的关系。
语法格式
创建表语句
create table table_name (id datatype primary key auto_increment,...);
修改表语句
alter table table_name auto_increment = ai_val;
参数说明
table_name
表名。
id
自增列字段名。
auto_increment
该关键字将字段指定为自增列。
若在插入时不指定此列的值(或指定此列的值为0、NULL、DEFAULT),此列的值将由自增计数器自动增长得到。
若插入或更新此列为一个大于当前自增计数器的值,执行成功后,自增计数器将刷新为此值。
自增初始值由
AUTO_INCREMENT [ = ] value
子句设置,若不设置,默认为1。datatype
自增列的数据类型。仅支持整数类型、4字节或8字节浮点类型。
ai_val
该值大于自增字段最大值时,修改才生效。
示例
1、创建兼容MySQL的库db_mysql,并进入。
CREATE DATABASE db_mysql dbcompatibility='B';
\c db_mysql
2、创建带有auto_increment字段的表,指定主键。
create table test1(a int primary key auto_increment, b int);
3、插入数据进行测试。
insert into test1(b) values(1);
insert into test1(b) values(1);
insert into test1 values(0,3); --自增
insert into test1 values(NULL,4); --自增
insert into test1 values(10000,5); --此处改变自增列的下一个值为10001
insert into test1(b) values(6);
insert into test1 values(10,7); --此处由于10较小,不改变序列下一个值
insert into test1(b) values(8);
4、查询结果。
select * from test1;
结果显示如下:
a | b
-------+---
1 | 1
2 | 1
3 | 3
4 | 4
10000 | 5
10001 | 6
10 | 7
10002 | 8
(8 rows)