表auto_increment修改为auto_random报错提示“Invalid auto random: modifying the auto_random column type is not supported”

【TiDB 使用环境】生产环境
【TiDB 版本】7.5.3
【操作系统】
【部署方式】云上主机自检
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
表的结构如下

CREATE TABLE `xxxxxx` (
  `imgId` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '图片自增ID',
  `itemId` bigint(20) unsigned NOT NULL COMMENT '商品编号',
  `imgType` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '图片类型',
  `imgUrl` varchar(60) NOT NULL DEFAULT '' COMMENT '图片路径',
  `sortOrder` tinyint(2) unsigned NOT NULL DEFAULT '99' COMMENT '排序',
  `imgDesc` varchar(1000) NOT NULL DEFAULT '' COMMENT '图片描述',
  `jsonData` json DEFAULT NULL COMMENT 'OCR等扩展信息',
  `addTime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `updateTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
  PRIMARY KEY (`imgId`) /*T![clustered_index] CLUSTERED */,
  KEY `itemId` (`itemId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

修改语句如下

ALTER TABLE xxxxxx MODIFY COLUMN imgId BIGINT UNSIGNED AUTO_RANDOM COMMENT '图片ID';

然后错误如下
ERROR 8216 (HY000): Invalid auto random: modifying the auto_random column type is not supported

其中 tidb_allow_remove_auto_inc 和 alter-primary-key 参数都已满足要求

当前是在测试库新建的空表做测试报错, 生产实际表中是有大量数据存在的

这个是什么根源?

auto_random不支持int类型
你先把int改为bigint,然后再把auto_increment改为auto_random

1 个赞

不支持添加 atuo_random 属性。只能通过删除字段然后新增字段的方法。
https://docs.pingcap.com/zh/tidb/stable/auto-random/#使用限制

他这个语句不算添加,是修改。你看图里标记的下一条,支持将auto_increment改为auto_random的。

:joy:这么说的话,这两句冲突啊,上一句是不支持用alter语句添加或删除auto_random,下一句是支持用alter语句添加auto_random属性。

不过,单看下一句,也会存在修改失败的情况。

是的,我一开始读的时候也以为不支持,还是有点歧义的。然后我找了个环境跑了下,发现是可以修改的。这两句合成一句或者换个说法可能比较好理解一点。

一楼说的是对的,这样就执行成功了。

SET SESSION tidb_allow_remove_auto_inc = ON;

ALTER TABLE xxxxxx MODIFY COLUMN imgId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '图片ID';

ALTER TABLE xxxxxx MODIFY COLUMN imgId BIGINT UNSIGNED AUTO_RANDOM COMMENT '图片ID';

7.5.3 是支持修改的哈,标记的下一条就是

这么看来得更换成两条语句才行,先修改字段类型,在修改auto_random了

已验证,确实需要分开成两个语句操作,感谢☕️

1 个赞

不错,学到了,我说怎么上次不行呢

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