【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】社区版
【问题描述】自增列支持插入0吗
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】社区版
【问题描述】自增列支持插入0吗
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 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
开始的自增列,可能需要在应用程序层面进行特殊处理。
详情请参考:
小助手的回复是否解决了您的问题呢