#### 16.2.4.1 损坏的 MyISAM 表

尽管`MyISAM`表格式非常可靠（SQL 语句对表的所有更改都在语句返回之前写入），如果发生以下任何事件，您仍然可以得到损坏的表：

-   这[**mysqld**](mysqld.html)进程在写入过程中被杀死。

-   发生意外的计算机关闭（例如，计算机已关闭）。

-   硬件故障。

-   您正在使用外部程序（例如[**迈萨姆奇克**](myisamchk.html)) 来修改同时被服务器修改的表。

-   MySQL 中的软件错误或`MyISAM`代码。

    损坏表的典型症状是：

-   从表中选择数据时出现以下错误：

    ```
    Incorrect key file for table: '...'. Try to repair it
    ```

-   查询不会在表中找到行或返回不完整的结果。

    你可以检查一个健康`MyISAM`表使用[`检查表`](check-table.html)声明，并修复损坏的`MyISAM`表与[`维修台`](repair-table.html).什么时候[**mysqld**](mysqld.html)没有运行，你也可以检查或修复一个表[**迈萨姆奇克**](myisamchk.html)命令。看[第 13.7.3.2 节，“CHECK TABLE 语句”](check-table.html),[第 13.7.3.5 节，“REPAIR TABLE 语句”](repair-table.html)， 和[第 4.6.4 节，“myisamchk - MyISAM 表维护实用程序”](myisamchk.html).

    如果您的表经常损坏，您应该尝试确定发生这种情况的原因。要知道的最重要的事情是表是否由于意外的服务器退出而损坏。您可以通过查找最近的`重启mysqld`错误日志中的消息。如果有这样的消息，很可能表损坏是服务器死机的结果。否则，可能在正常操作期间发生损坏。这是一个错误。您应该尝试创建一个可重现的测试用例来演示该问题。看[第 B.3.3.3 节，“如果 MySQL 不断崩溃怎么办”](crashing.html)， 和[第 5.9 节，“调试 MySQL”](debugging-mysql.html).
