MySQL - CHECK TABLE 语句
如果数据库服务器出现问题,例如服务器意外关闭、将数据写入硬盘时发生错误等,这些情况可能会导致数据库运行异常,在最坏的情况下,甚至崩溃。有时特定的表会被破坏。
MySQL CHECK TABLE 语句
MySQL CHECK TABLE 语句用于检查数据库表的完整性,如果指定表中存在任何错误,此语句会列出所有错误。
语法
以下是 MySQL CHECK TABLE 语句的语法 -
CHECK TABLE tbl_name [, tbl_name] ... [option] ... option: { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED }
示例
假设我们创建了一个名为 sales 的表,如下所示 -
CREATE TABLE sales( ID INT, ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchDate date, DeliveryTime time, Price INT, Location VARCHAR(255) );
现在,我们将使用 INSERT 语句在 Sales 表中插入 5 条记录 -
Insert into sales values (1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad'), (2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000, 'Vishakhapatnam'), (3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000, 'Vijayawada'), (4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai'), (5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000, 'Goa');
下表验证了上表的状态 -
CHECK TABLE sales;
输出
以下是上述查询的输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.sales | check | status | OK |
验证多个表
您还可以使用 CHECK TABLE 语句一次验证多个表的状态。
示例
假设我们创建了三个新表,如下所示 -
CREATE TABLE Test1(ID INT, Name VARCHAR(255)); CREATE TABLE Test2(ID INT, Name VARCHAR(255)); CREATE TABLE Test3(ID INT, Name VARCHAR(255));
以下查询将验证所有这些表并显示结果 -
CHECK TABLE Test1, Test2, Test3;
输出
上述查询生成以下输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.test1 | check | status | OK |
mydb.test2 | check | status | OK |
mydb.test3 | check | status | OK |
CHECK TABLE 选项
CHECK TABLE 语句提供各种可选子句 -
如果在 CHECK TABLE 语句中指定 QUICK 子句,它只会检查不正确的链接 -
CHECK TABLE sales QUICK;
输出
上述 mysql 查询将产生如下所示的输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.sales | check | status | OK |
如果在 CHECK TABLE 语句中指定 FAST 子句,它会检查已正确关闭的表 -
CHECK TABLE sales FAST;
输出
以下是上述 mysql 查询的输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.sales | check | status | Table is already up to date |
如果在 CHECK TABLE 语句中指定 CHANGED 子句,它只会检查已修改的数据 -
CHECK TABLE sales CHANGED;
输出
以下是上述查询的输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.sales | check | status | Table is already up to date |
如果在 CHECK TABLE 语句中指定 MEDIUM 子句,它会验证链接,并计算行的键校验和 -
CHECK TABLE sales MEDIUM;
输出
上述 mysql 查询生成以下输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.sales | check | status | OK |
如果在 CHECK TABLE 语句中指定 EXTENDED 子句,它将对每一行的所有键执行完整检查 -
CHECK TABLE sales EXTENDED;
输出
执行上述查询后,将产生以下输出 -
Table | Op | Msg_type | Msg_text |
---|---|---|---|
mydb.sales | check | status | OK |