tidb auto_increment 改为auto_random

请问下 将tidb的表字段由auto_increment 改为auto_random 是不是不能直接用alter table的命令修改,需要重新建表?

不支持使用 ALTER TABLE 来修改 AUTO_RANDOM 属性,包括添加或移除该属性
https://docs.pingcap.com/zh/tidb/stable/auto-random#使用限制
所以只能重建表

最近学习了PCTP的视频,非 int 以及 bigint 类型的 pk,可以使用 SHARD_ROW_ID_BITS 和 PRE_SPLIT_REGIONS 的方式来打散 insert 写入热点,Bigint 类型的 pk,可以使用 AUTO_RANDOM 的方式打散 insert 写入热点

可以更改,需要设置tidb_allow_remove_auto_inc

1 个赞

auto_increment 的字段类型是什么。如果是int可以先alter table改为bigint,然后通过变量tidb_allow_remove_auto_inc允许移除自增。最后可以通过alter table的方式设置auto_random。
官方文档明确说明不支持使用 ALTER TABLE 来修改 AUTO_RANDOM 属性,包括添加或移除该属性。这里可能文档有误,但是也不建议将auto_increment改为auto_random,因为如果表中有值相当于显式赋值可能会导致该表提前耗尽用于自动分配的数值。如果是已经上线的业务建议通过SHARD_ROW_ID_BITS 和 PRE_SPLIT_REGIONS的方式打散热点,如果还未上线建议重建表导数据。

1 个赞

好的,多谢回复

了解了,谢谢回复

:+1:,是的可以更改。

试了,不用规定是聚簇索引也可以,学习了

确实,咨询了官方,确实直接从auto_increment改为auto_random 可能会有异常,感谢大佬回复

:+1:之前没怎么干过,刚测试了下确实可以,也学习了 tidb_allow_remove_auto_inc参数

看起来不能全信官方文档,还是要动手验证一下:grimacing:

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