MariaDB中分区表的AUTO_INCREMENT自增ID是否全局唯一?
回答结论
带AUTO_INCREMENT属性的自增字段,在预定义分区策略的分区表中是所有分区范围内全局唯一,不会仅在单个分区内保证唯一。
底层逻辑说明
- 分区是MySQL层面的逻辑表拆分,对上层业务暴露的始终是单表形态,
p0_my_table/p1_my_table/p2_my_table/p3_my_table只是底层独立存储的物理文件,自增序列的维护是表级行为,和分区无关:- 自增计数器、自增锁都是表级资源,不会为每个分区单独维护独立的自增序列
- 数据插入流程是:先拿到表级分配的全局唯一自增id,再根据分区路由规则把整行数据写入对应分区,不存在分区自行生成id的逻辑
- 以
my_table为例,无论你采用RANGE、LIST还是HASH分区策略,正常插入数据时生成的自增id不会出现跨分区重复的情况,全局唯一约束始终生效。
边界注意点
- 如果建分区表时没有把自增
id字段纳入主键、唯一键的字段集合,MySQL会直接抛出建表错误,根本无法完成分区表创建,不存在分区独立生成自增id的运行场景。 - 手动调整自增起始值、单独给分区批量导入数据这类运维操作,可能造成自增id断层,但不会破坏id的全局唯一性,不会出现跨分区id重复的问题。
内容的提问来源于stack exchange,提问作者Swastik
相关产品推荐
相关产品推荐

