MySQL - 檢查表語句



如果資料庫伺服器發生某些錯誤,例如伺服器意外關閉或寫入硬碟資料時發生錯誤等。這些情況可能導致資料庫執行不正確,最壞情況下可能導致資料庫崩潰。有時特定的表會被損壞。

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;

輸出

以下是上述查詢的輸出:

操作 訊息型別 訊息文字
mydb.sales 檢查 狀態 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;

輸出

上述查詢生成以下輸出:

操作 訊息型別 訊息文字
mydb.test1 檢查 狀態 OK
mydb.test2 檢查 狀態 OK
mydb.test3 檢查 狀態 OK

CHECK TABLE 選項

CHECK TABLE 語句提供了各種可選子句:

如果在 CHECK TABLE 語句中指定 **QUICK 子句**,它只會檢查不正確的連結:

CHECK TABLE sales QUICK;

輸出

上述 mysql 查詢將產生如下所示的輸出:

操作 訊息型別 訊息文字
mydb.sales 檢查 狀態 OK

如果在 CHECK TABLE 語句中指定 **FAST 子句**,它會檢查正確關閉的表:

CHECK TABLE sales FAST;

輸出

以下是上述 mysql 查詢的輸出:

操作 訊息型別 訊息文字
mydb.sales 檢查 狀態 表已是最新的

如果在 CHECK TABLE 語句中指定 **CHANGED 子句**,它只會檢查已修改的表:

CHECK TABLE sales CHANGED;

輸出

以下是上述查詢的輸出:

操作 訊息型別 訊息文字
mydb.sales 檢查 狀態 表已是最新的

如果在 CHECK TABLE 語句中指定 **MEDIUM 子句**,它會驗證連結,並計算行的鍵校驗和:

CHECK TABLE sales MEDIUM;

輸出

上述 mysql 查詢生成以下輸出:

操作 訊息型別 訊息文字
mydb.sales 檢查 狀態 OK

如果在 CHECK TABLE 語句中指定 **EXTENDED 子句**,它會對每一行中的所有鍵執行完整檢查:

CHECK TABLE sales EXTENDED;

輸出

執行上述查詢後,它將產生以下輸出:

操作 訊息型別 訊息文字
mydb.sales 檢查 狀態 OK
廣告