我们已经加载了几个表(每个数亿行),但是下面的查询需要重写整个表(除了AUTO_INCREMENT
之外,类型完全相同):
ALTER TABLE sales MODIFY id BIGINT(20) NOT NULL AUTO_INCREMENT;
这只是MySQL的一个巨大疏忽,还是从根本上改变了磁盘上数据的格式?
答案 0 :(得分:1)
更改列的AUTO_INCREMENT特性不能作为在线DDL更改。即使我试图明确要求它:
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.
这种更改列定义的情况似乎计为列类型的更改(基于错误消息)。
更改列数据类型...仅支持ALGORITHM = COPY
在MySQL 5.7中,重建表仍然需要更改列的类型,除了一种情况:增加VARCHAR长度是允许的INPLACE更改。
您并不是唯一一个认为应该允许在不进行表重组的情况下更改AUTO_INCREMENT属性的人:https://bugs.mysql.com/bug.php?id=72109