TiDB 自增主键插入id=0

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

MySQL [TCDCHotelPhoenixNest]> create table test (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键’, PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */);
Query OK, 0 rows affected (0.08 sec)

MySQL [TCDCHotelPhoenixNest]> insert into test values (0);
Query OK, 1 row affected (0.00 sec)

MySQL [TCDCHotelPhoenixNest]> select * from test;
±—+
| id |
±—+
| 1 |
±—+
1 row in set (0.01 sec)

MySQL [TCDCHotelPhoenixNest]> insert into test values (10);
Query OK, 1 row affected (0.00 sec)

MySQL [TCDCHotelPhoenixNest]> select * from test;
±—+
| id |
±—+
| 1 |
| 10 |
±—+
2 rows in set (0.00 sec)

MySQL [TCDCHotelPhoenixNest]> insert into test values (2);
Query OK, 1 row affected (0.01 sec)

MySQL [TCDCHotelPhoenixNest]> select * from test;
±—+
| id |
±—+
| 1 |
| 2 |
| 10 |
±—+
3 rows in set (0.01 sec)

MySQL [TCDCHotelPhoenixNest]>

1 个赞

以前我也遇到过自增主键插入0的问题,数据迁移时候值出现问题了

和mysql一样,0或null,或空,都是最大值+1

没有吧

插入0通常会被视为请求使用下一个自增值

1 个赞


试了下 MySQL 5.7.44 也是一样表现的

1 个赞

在数据库表中ID采用了自增ID策略。默认情况下当ID是0或者null的时候,数据库会自动产生一个新的自增序列作为这条记录的ID。这就是我们插入0值ID记录时与期望不符原因。
mysql官方文档有解释可以看看
MySQL :: MySQL 8.0 Reference Manual :: 7.1.11 Server SQL Modes

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。