描述

如果创建表时需要某个数值列的值不重复并且保持递增,这就是自增列。在 MySQL 租户里,列的类型可以定义为 AUTO_INCREMENT,即 MySQL 租户的自增列。

自增列有三个重要属性,包括自增起始值、自增步长和自增列缓存大小,通过以下三个租户变量参数来控制。

系统变量

说明

auto_increment_cache_size

用于设置自增的缓存个数,取值范围为 [1, 100000000],默认值为 1000000

auto_increment_increment

用于设置自增步长,取值范围为 [1, 65535],默认值为 1

auto_increment_offset

用于确定 AUTO_INCREMENT 列值的起点,取值范围为 [1, 65535],默认值为 1

示例

下面创建了一个自增列,在使用 INSERT 语句插入记录时不需要指定自增列,OceanBase 数据库会自动为该列填充值。

如果在 INSERT 时指定了自增列的值,且这个值为 0,则 OceanBase 数据库会用自增列的下一个值填充列的值;如果这个值比当前最大值小,则不影响自增列的下一个值的计算;如果这个值比当前值最大值大,则自增列会把插入值和自增列缓存值的和作为下次自增的起始值。

  1. obclient> CREATE TABLE t1(id bigint not null auto_increment primary key, name varchar(50), gmt_create timestamp not null default current_timestamp);
  2. Query OK, 0 rows affected (0.08 sec)
  3. obclient> INSERT INTO t1(name) VALUES('A'),('B'),('C');
  4. Query OK, 3 rows affected (0.01 sec)
  5. Records: 3 Duplicates: 0 Warnings: 0
  6. obclient> SELECT * FROM t1;
  7. +----+------+---------------------+
  8. | id | name | gmt_create |
  9. +----+------+---------------------+
  10. | 1 | A | 2020-04-03 17:09:55 |
  11. | 2 | B | 2020-04-03 17:09:55 |
  12. | 3 | C | 2020-04-03 17:09:55 |
  13. +----+------+---------------------+
  14. 3 rows in set (0.01 sec)
  15. obclient> INSERT INTO t1(id, name) VALUES(0, 'D');
  16. Query OK, 1 row affected (0.00 sec)
  17. obclient> INSERT INTO t1(id, name) VALUES(-1,'E');
  18. Query OK, 1 row affected (0.00 sec)
  19. obclient> INSERT INTO t1(id, name) VALUES(10,'F');
  20. Query OK, 1 row affected (0.01 sec)
  21. obclient> INSERT INTO t1(name) VALUES('G');
  22. Query OK, 1 row affected (0.00 sec)
  23. obclient> SELECT * FROM t1;
  24. +---------+------+---------------------+
  25. | id | name | gmt_create |
  26. +---------+------+---------------------+
  27. | -1 | E | 2020-04-03 17:10:24 |
  28. | 1 | A | 2020-04-03 17:09:55 |
  29. | 2 | B | 2020-04-03 17:09:55 |
  30. | 3 | C | 2020-04-03 17:09:55 |
  31. | 4 | D | 2020-04-03 17:10:19 |
  32. | 10 | F | 2020-04-03 17:10:29 |
  33. | 1000011 | G | 2020-04-03 17:10:34 |
  34. +---------+------+---------------------+
  35. 7 rows in set (0.00 sec)