如果在使用
ALTER TABLE
更改字符集或字符列的排序规则时出现重复键错误,原因可能是新列排序规则将两个键映射到相同的值,或者表已损坏。在后一种情况下,您应该REPAIR TABLE
在桌子上跑步。REPAIR TABLE
适用于
MyISAM
、ARCHIVE
和
CSV
表格。
如果ALTER TABLE
死于以下错误,问题可能是 MySQL 在之前的ALTER TABLE
操作中崩溃了,并且有一个名为
or
的旧表:
A-
xxx
B-
xxx
Error on rename of './database/name.frm'
to './database/B-xxx.frm' (Errcode: 17)
在这种情况下,转到 MySQL 数据目录并删除名称以A-
或
开头的所有文件B-
。(您可能想将它们移到别处而不是删除它们。)
ALTER TABLE
以下列方式工作:
创建一个以 请求的结构更改命名的新表。
A-
xxx
将原始表中的所有行复制到 .
A-
xxx
将原始表重命名为 .
B-
xxx
重命名 为您的原始表名。
A-
xxx
删除 。
B-
xxx
如果重命名操作出现问题,MySQL 会尝试撤消更改。如果出现严重错误(尽管这不应该发生),MySQL 可能会将旧表保留为
. 在系统级别对表文件进行简单的重命名应该可以恢复您的数据。
B-
xxx
如果您ALTER TABLE
在事务表上使用或者如果您使用的是 Windows,
则在您对表执行操作后ALTER TABLE
解锁该表
LOCK
TABLE
。这样做是因为
InnoDB
这些操作系统无法删除正在使用的表。