VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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)