MySQL修复表允许无涯教程修复或修复损坏的表。 当执行修复表语句时,它首先检查要修复的表是否需要升级。如果需要,它将使用与Check Table类似的规则执行升级。在执行"table repair"选项之前,保持已备份表,因为它可能导致的数据丢失。
以下是修复MySQL损坏表的语法:
REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
让无涯教程详细讨论每个选项的使用。
NO_WRITE_TO_BINLOG或LOCAL - 它是服务器负责编写复制从站的修复表语句的地方。
QUICK - 快速选项允许修复表语句仅用于修复索引文件。它不允许修复数据文件。这种类型的修复与 myisamchk --recover -quick 命令有效。
EXTENDED - 允许MYSQL在排序时一次创建一个索引。这种类型的修复与 myisamchk - safe-checover 命令有效相同。
USE_FRM - 当找不到 .myi 索引文件或者header已损坏时,使用此选项。 USE-FRM选项通知MySQL不信任此文件header中存在的信息,并通过使用数据字典提供的信息重新创建它。这种类型的修复无法使用 myisamchk 命令。
让无涯教程通过示例理解修复表语句的工作。首先,需要在所选数据库中创建一个名为vehicle的新表,如下所示:
CREATE TABLE vehicle ( vehicle_no VARCHAR(18) PRIMARY KEY, model_name VARCHAR(45), cost_price DECIMAL(10,2 ), sell_price DECIMAL(10,2) );
接下来,无涯教程将使用以下语句将某些数据插入此表中:
mysql> INSERT INTO vehicle (vehicle_no, model_name, cost_price, sell_price) VALUES('S2001', 'Scorpio', 950000, 1000000), ('M3000', 'Mercedes', 2500000, 3000000), ('R0001', 'Rolls Royas', 75000000, 85000000);
接下来,执行以下语句以验证数据:
mysql> SELECT * FROM vehicle;
无涯教程应该得到以下结果:
接下来,无涯教程将执行以下语句来检查车辆表的存储引擎:
mysql> SELECT table_name, engine FROM information_schema.tables WHERE table_name = 'vehicle';
执行声明后,无涯教程应该得到以下输出:
在这里,无涯教程可以看到车辆表的存储引擎是InnoDB。因此,如果使用下面的查询为此存储引擎创建修复表,MySQL发出了错误:
mysql> REPAIR TABLE vehicle;
请参阅以下输出:
要删除此错误,无涯教程首先需要将表存储引擎更改为MyISAM,然后使用以下查询,然后使用"repair table"语句。
mysql> ALTER TABLE vehicle ENGINE = 'MyISAM'; //Now, use the repair table query mysql> REPAIR TABLE vehicle;
无涯教程将获得以下输出:
在此输出中,无涯教程可以看到修复表语句在结果集中包含以下列:
列名 | 描述 |
---|---|
Table | 此列表示表的名称。 |
op | 此列始终包含维修单词是否使用该语句支持存储引擎。 |
msg_type | 此列可以是状态,错误,信息,注意或警告。 |
msg_text | 此列由信息消息组成。 |
让无涯教程查看另一个例子以使用任何快速,扩展或use_frm选项的修复表语句。因此,将首先创建另一个名为memberships表并在" myisam "存储引擎中存储此表而不是默认的一个InnoDB。
CREATE TABLE memberships ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(55) NOT NULL, email VARCHAR(55) NOT NULL, plan VARCHAR(45) NOT NULL, validity_date DATE NOT NULL ) ENGINE = MyISAM;
无涯教程将使用以下语句将一些数据插入此表中:
mysql> INSERT INTO memberships (name, email, plan, validity_date) VALUES('Stephen', 'stephen@learnfk.com', 'Gold', '2020-06-13'), ('Jenifer', 'jenifer@learnfk.com', 'Platinum', '2020-06-10'), ('david', 'david@learnfk.com', 'Silver', '2020-06-15');
接下来,执行SELECT语句以验证数据。无涯教程将获得以下结果:
由于无涯教程创建了MyISAM存储引擎表,因此修复表语句不会发出任何错误。请参阅以下声明:
mysql> REPAIR TABLE memberships QUICK EXTENDED;
应该按如下方式获得输出:
如果无涯教程使用所选数据库中不存在的表使用修复表语句,MySQL会给错误消息。请参阅以下声明:
mysql> REPAIR TABLE service_memberships QUICK EXTENDED;
执行后,将获得以下输出:
在本文中,无涯教程已经学会了如何使用修复表语句修复MySQL中的损坏表。此语句仅适用于某些存储引擎。因此,在使用此查询之前,首先检查表存储引擎支持它。如果不支持,需要将其更改为MyISAM,ARCHIVE或CSV。在执行"table repair"查询之前,保持表的备份总是很好的,因为它可能导致无涯教程的数据丢失。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)