AUTO_INCREMENT=1000001 并且 AUTO_ID_CACHE=1 主键id会跳号

– 建表语句
CREATE TABLE ieg_operation_promotion_project_sequence_cc (
id int NOT NULL AUTO_INCREMENT COMMENT ‘主键id’,
code varchar(64) DEFAULT NULL COMMENT ‘项目编码’,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=1000001 /*T![auto_id_cache] AUTO_ID_CACHE=1 */ COMMENT=‘CC’;

创建表后插入带主键数据
INSERT INTO ieg_operation_promotion_project_sequence_cc

(id,code)

VALUES(1000001, ‘D0324001’);

使用dbeaver连接工具创建以及查看
建表后插入正常,第二天查看ddl
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=1008001 /*T![auto_id_cache] AUTO_ID_CACHE=1 */
AUTO_INCREMENT 跳号,并且按照4000缓存递增

需要主键id单调自增连续

1 个赞

聚簇索引只保证自增且唯一,并不保证连续分配。分布式数据库是这样的。
你改成NONCLUSTERED 非聚簇索引试试能不能连续递增。

看看你有几个tidb节点,每个节点会缓存一段来用。如果重启又跳得更大了。

看看这个,对性能会有些影响,跳跃缓存间隔可以设置


https://docs.pingcap.com/zh/tidb/stable/auto-increment#mysql-兼容模式

1 个赞

当然不是 AUTO_ID_CACHE=1肯定是连续分配的,我们用了很多了

1 个赞

现在表里的数据最大的id是多少?后面有实际插入数据吗?

1 个赞

先看下插入的数据有没有跳号,然后如果期间有 tidb 宕机/重启了,或者集群的网络出现了故障,是会有跳号发生的

1 个赞

https://docs.pingcap.com/zh/tidb/stable/auto-increment#mysql-兼容模式
参考下这个文档,不能完全保证连续的,可以保证唯一、单调递增
另外自增列是不建议显式插入数据的,参考:https://docs.pingcap.com/zh/tidb/stable/auto-increment#清除自增-id-缓存

2 个赞

明白了

就是分布式数据库的特点吧