Documentation Home

B.3.6.1 ALTER TABLE 的问题

如果在使用 ALTER TABLE更改字符集或字符列的排序规则时出现重复键错误,原因可能是新列排序规则将两个键映射到相同的值,或者表已损坏。在后一种情况下,您应该REPAIR TABLE在桌子上跑步。REPAIR TABLE适用于 MyISAMARCHIVECSV表格。

如果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这些操作系统无法删除正在使用的表。