tidb支持修改primary key吗?

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5
之前数据再mysql,业务上有需要修改primary key的需求,tidb支持修改primary key 吗?并且数据导过来后主键是CLUSTERED。不能重建表,重建表后数据需要重新处理了。。。是不是无解?

我记得是有参数限制吧 :joy:这个参数在6.5被废弃了。这样的话,应该就是你说的,不支持修改。

不支持修改整数类型的主键,这是由于当主键为整数类型时,TiDB 使用其作为数据组织的索引。

alter-primary-key(已废弃)

  • 用于控制添加或者删除主键功能。
  • 默认值:false
  • 默认情况下,不支持增删主键。将此变量被设置为 true 后,支持增删主键功能。不过对在此开关开启前已经存在的表,且主键是整型类型时,即使之后开启此开关也不支持对此列表删除主键。

注意

该配置项已被废弃,目前仅在 @@tidb_enable_clustered_index 取值为 INT_ONLY 时生效。如果需要增删主键,请在建表时使用 NONCLUSTERED 关键字代替。要了解关于 CLUSTERED 主键的详细信息,请参考聚簇索引

业务上有需要修改primary key的需求,是指修改primary key的值还是将primary key改到其他字段上呢?Tidb不支持修改、删除clustered

具体是什么改成什么呢

可以考虑先在Tidb中创建表结构,让后导入数据。

重新设计下表结构,可以根据实际情况使用聚簇和非聚簇表

聚簇索引表应该是不支持的

是的,看来只能是业务上重建表了,把数据再导过来

嗯,只能重新设计表了,前期在从Mysql导入数据过来的时候,没有覆盖到这个点,所以造成了问题

之前mysql的做法是先drop掉primary key,再重新add,数据转tidb后,是clusterrd的了,所以drop不掉了,目前看只能重建表,然后再写入数据了

你们是什么业务场景啊,业务数据库从mysql迁移到TiDB了吗?

是的,漏掉了这种场景

重新新建表,用insert into语法转移下数据

MySQL这么干,ONLINE DDL也要锁表的。

差不多只能这样了~

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