MySQL - 修复表

MySQL - 修复表 首页 / MySQL入门教程 / MySQL - 修复表

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 REPAIR TABLE

接下来,无涯教程将执行以下语句来检查车辆表的存储引擎:

mysql> SELECT table_name, engine 
FROM information_schema.tables 
WHERE table_name = 'vehicle';

执行声明后,无涯教程应该得到以下输出:

MySQL REPAIR TABLE

在这里,无涯教程可以看到车辆表的存储引擎是InnoDB。因此,如果使用下面的查询为此存储引擎创建修复表,MySQL发出了错误:

mysql> REPAIR TABLE vehicle;

请参阅以下输出:

MySQL REPAIR TABLE

要删除此错误,无涯教程首先需要将表存储引擎更改为MyISAM,然后使用以下查询,然后使用"repair table"语句。

mysql> ALTER TABLE vehicle ENGINE = 'MyISAM';
//Now, use the repair table query 
mysql> REPAIR TABLE vehicle;

无涯教程将获得以下输出:

MySQL REPAIR TABLE

在此输出中,无涯教程可以看到修复表语句在结果集中包含以下列:

列名描述
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语句以验证数据。无涯教程将获得以下结果:

MySQL REPAIR TABLE

由于无涯教程创建了MyISAM存储引擎表,因此修复表语句不会发出任何错误。请参阅以下声明:

mysql> REPAIR TABLE memberships QUICK EXTENDED;

应该按如下方式获得输出:

MySQL REPAIR TABLE

如果无涯教程使用所选数据库中不存在的表使用修复表语句,MySQL会给错误消息。请参阅以下声明:

mysql> REPAIR TABLE service_memberships QUICK EXTENDED;

执行后,将获得以下输出:

MySQL REPAIR TABLE

在本文中,无涯教程已经学会了如何使用修复表语句修复MySQL中的损坏表。此语句仅适用于某些存储引擎。因此,在使用此查询之前,首先检查表存储引擎支持它。如果不支持,需要将其更改为MyISAM,ARCHIVE或CSV。在执行"table repair"查询之前,保持表的备份总是很好的,因为它可能导致无涯教程的数据丢失。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入拆解Java虚拟机 -〔郑雨迪〕

Web协议详解与抓包实战 -〔陶辉〕

人人都能学会的编程入门课 -〔胡光〕

NLP实战高手课 -〔王然〕

Kafka核心源码解读 -〔胡夕〕

Spring编程常见错误50例 -〔傅健〕

操作系统实战45讲 -〔彭东〕

程序员的个人财富课 -〔王喆〕

超级访谈:对话玉伯 -〔玉伯〕

好记忆不如烂笔头。留下您的足迹吧 :)