首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MODIFY AUTO_INCREMENT需要重建表?

为什么MODIFY AUTO_INCREMENT需要重建表?
EN

Stack Overflow用户
提问于 2017-11-21 08:29:05
回答 1查看 334关注 0票数 1

我们加载了几个表(每个表有数亿行),但是下面的查询需要重写整个表(除了AUTO_INCREMENT,类型完全相同):

代码语言:javascript
复制
ALTER TABLE sales MODIFY id BIGINT(20) NOT NULL AUTO_INCREMENT;

这只是MySQL的一个巨大疏忽,还是从根本上改变了磁盘上数据的格式?

EN

回答 1

Stack Overflow用户

发布于 2017-11-21 09:50:26

更改列的AUTO_INCREMENT特征不能作为联机DDL更改来完成。即使我试图显式地请求它:

代码语言:javascript
复制
mysql> alter table sales modify column id bigint not null auto_increment, 
  ALGORITHM=INPLACE;

ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. 
Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

这种更改列定义的情况似乎被视为对列类型的更改(基于错误消息)。

https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html#innodb-online-ddl-summary-grid说:

更改列数据类型...仅支持ALGORITHM=COPY

在VARCHAR5.7中,仍然需要更改列的类型才能重新构建表,但有一种情况除外:允许以原地更改的方式增加MySQL长度。

您不是唯一一个认为应该允许在不进行表重构的情况下更改AUTO_INCREMENT属性的人:https://bugs.mysql.com/bug.php?id=72109

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47403383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档