如果在使用
ALTER TABLE更改字符集或字符列的排序规则时出现重复键错误,原因可能是新列排序规则将两个键映射到相同的值,或者表已损坏。在后一种情况下,您应该REPAIR TABLE在桌子上跑步。REPAIR TABLE适用于
MyISAM、ARCHIVE和
CSV表格。
如果ALTER TABLE死于以下错误,问题可能是 MySQL 在之前的ALTER TABLE
操作中崩溃了,并且有一个名为
or
的旧表:
A-xxxB-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这些操作系统无法删除正在使用的表。