AUTO_INCREMENT列能设置从0开始吗或者支持insert为0的数据?

【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】社区版
【问题描述】自增列支持插入0吗
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据文档库中的信息,在 OceanBase 数据库中,当您尝试使用 INSERT 语句插入一个自增列的值时,如果该值为 0 并且系统变量 SQL_MODE 未设置为 NO_AUTO_VALUE_ON_ZERO,那么 OceanBase 会使用自增列的下一个值来填充这一列的值 [1]。这意味着插入 0 实际上会被解释为让数据库自动分配下一个自增值。如果 SQL_MODE 被设置为 NO_AUTO_VALUE_ON_ZERO,则插入 0 时不会自动生成 AUTO_INCREMENT[1], [2]

示例中可以看到,当插入 0 时,OceanBase 自动使用了自增列的下一个有效值 [2]

obclient> INSERT INTO t1(id, name) VALUES(0, 'D');
Query OK, 1 row affected

obclient> SELECT * FROM t1;
+----+------+---------------------+
| id | name | gmt_create          |
+----+------+---------------------+
|  1 | A    | 2021-12-17 14:21:53 |
|  2 | B    | 2021-12-17 14:21:53 |
|  3 | C    | 2021-12-17 14:21:53 |
|  4 | D    | 2021-12-17 14:22:36 |
+----+------+---------------------+

因此,自增列本身不会从 0 开始,但如果插入 0,则会被解释为让数据库决定下一个自增值。如果您希望自增列从某个特定值开始而不是默认的 1,可以通过修改 auto_increment_offset 系统变量来实现 [1]。然而,这并不意味着自增列会从 0 开始,因为 auto_increment_offset 的最小值为 1。如果您确实需要从 0 开始的自增列,可能需要在应用程序层面进行特殊处理。

详情请参考:

  1. 创建表
  2. 定义自增列
  3. OBKV-Table Java 客户端支持的接口
  4. OBKV-Table 操作类型

小助手的回复是否解决了您的问题呢

设置sql_mode=NO_AUTO_VALUE_ON_ZERO 可以临时绕过
1、当sql-mode中不含NO_AUTO_VALUE_ON_ZERO这个模式时,插入为0的数据时,会把id自动递增后插入
2、设置了NO_AUTO_VALUE_ON_ZERO 自增列可以把0插入
例子: