表中的主键是标识符。通常,它们是唯一的数字值,用于标识表中的行。
让我们举个例子。有一桌学生。该表包含列,如ID、姓名、姓氏、电子邮件、地址等。在这种情况下,ID将是主键,每个学生的ID值应该是唯一的。
需要注意的是,该ID为auto-incremental,即自动增量生成。
下面的示例显示了创建带有主键的表的代码。
创建学生表
id INT NOT NULL AUTO_INCREMENT;
名称VARCHAR(40)不空,
VARCHAR(40)不空,
电子邮件VARCHAR(255)不空,
地址VARCHAR(200)不是NULL,
主键(id)
);
主键包含一个索引,当您使用select语句从表中检索数据来搜索信息时,将使用该索引。
有时,索引可能会损坏,导致MySQL错误1712。完整的错误信息可能如下所示:
错误1712 (HY000):索引PRIMARY在执行在线DDL操作时损坏。
MySQL错误1712的原因
以下是一些可能导致此错误的原因:
服务器损坏:突然断电会对服务器造成损坏。此外,服务器可能会因过热问题而损坏。确保您的MySQL数据库服务器有适当的通风,以避免加热问题,或者您可以购买冷却系统。您还可以安装一个软件,当服务器温度过高时发送警报。
硬盘问题:硬盘开始创建问题,当它变老。一定要在几年后更换硬盘。
恶意软件:有时,恶意软件会导致硬盘驱动器出现问题或创建文件系统问题,从而导致索引损坏。确保你的系统上安装了反恶意软件或反病毒软件,以防止此类问题。
如何修复MySQL中的错误1712 ?
如果出现此错误,最佳解决方案是修复索引。您可以使用REPAIR TABLE语句来解决这个问题。
在命令提示符下,登录MySQL:
Mysql -u yourUserName -p yourPassword
这里,-u用于用户名,-p用于指定密码。
你可以像这样使用REPAIR TABLE命令:
修复表student;
这个命令将修复名为students的表。
下面的示例展示了如何使用QUICK选项仅修复索引。此选项仅修复索引,而不修复数据文件。
修表学生快;
在某些情况下,还有另一种选择可能很有用。EXTENDED选项不仅修复索引,还尝试修复数据错误。
修表学生延长;
还有另一个选项——USE_FRM。这在索引文件损坏时使用。索引通常存储在. myi文件中。如果索引已损坏,可以使用USE_FRM选项使用数据字典重新创建索引。
修复表student USE_FRM;
替代解决方案
如果REPAIR TABLE语句失败,那么您可以使用第三方软件修复MySQL中损坏的索引。其中一个这样的软件是MySQL的Stellar Repair。该软件适用于Windows和Linux (CentOS Red Hat和Ubuntu)操作系统。但是,功能基本上是相同的。
修复MySQL数据库时,需要先停止MySQL服务。在下面的示例中,我们将停止MySQL80服务。
停止MySQL80
如果你不停止服务,MySQL的恒星修复将显示一条消息,说文件正在使用中。
一旦停止,您就可以复制包含数据的文件夹。数据通常存储在类似于下面的位置:
C:\ProgramData\MySQL\MySQL Server 8.0\Data
现在,安装MySQL的Stellar Repair并打开它。
按Browse按钮并查找数据文件夹的副本。
选择要修复的数据库。如果要修复所有数据库,请选择“数据库列表”选项并按“修复”按钮。
修复后,您可以将数据保存到文件中或恢复数据库。您可以将每个表保存为Excel、CSV或HTML文件。
结论
MySQL中的错误1712通常是由于主键索引损坏而发生的。在本文中,我们讨论了使用repair TABLE命令修复损坏索引的不同选项。我们还提到了一个第三方MySQL修复工具,它可以在repair TABLE失败的情况下修复索引。