MySQL - 診斷區域



診斷區域

診斷區域儲存了發生錯誤的資訊以及生成這些錯誤的語句資訊。

此區域包含兩種資訊:

  • 語句資訊,例如語句影響的行數。

  • 條件資訊,例如執行語句時發生的錯誤的錯誤程式碼及其錯誤訊息。

    在執行特定語句時,如果發生多個錯誤,則會儲存所有錯誤的資訊;如果未發生錯誤,則該特定語句的條件資訊部分將為空。

您可以使用 GET DIAGNOSTICS 語句訪問語句或條件資訊。

示例

假設我們建立了一個表,其中包含銷售詳細資訊以及客戶的聯絡詳細資訊,如下所示:

CREATE TABLE SALES_DETAILS (
   ID INT,
   ProductName VARCHAR(255) NOT NULL,
   CustomerName VARCHAR(255) NOT NULL,
   DispatchDate date,
   DeliveryTime time,
   Price INT,
   Location VARCHAR(255),
   CustomerAge INT,
   CustomrtPhone BIGINT,
   DispatchAddress VARCHAR(15),
   Email VARCHAR(50)
);

現在,讓我們使用 INSERT 語句將記錄插入到上面建立的表中,如下所示:

insert into SALES_DETAILS values(
   'not_number',
   'Raja',
   ,
   DATE('2019-09-01'),
   TIME('11:00:00'),
   7000,
   'Hyderabad',
   25,
   '9000012345',
   'Hyderabad – Madhapur',
   'pujasharma@gmail.com');
ERROR 1064 (42000): You have an error in your SQL syntax; check 
the manual that corresponds to your MySQL server version for the 
right syntax to use near ',
   DATE('2019-09-01'),
   TIME('11:00:00'),
   7000,
' at line 4
GET DIAGNOSTICS CONDITION 1 @state = RETURNED_SQLSTATE, @msg= MESSAGE_TEXT;

以下查詢檢索上面生成的錯誤的狀態和訊息:

GET DIAGNOSTICS CONDITION 1 @state = RETURNED_SQLSTATE, @msg= MESSAGE_TEXT;

您可以使用 SELECT 語句顯示這些變數(檢索到的值)。

SELECT @state, @msg;

輸出

以下是上述查詢的輸出:

@state @msg
42000 您的 SQL 語法有錯誤;請查閱與您的 MySQL 伺服器版本相對應的參考手冊,瞭解正確的語法。錯誤出現在第 4 行附近,',DATE('2019-09-01'),TIME('11:00:00'),7000,'

示例

以下是另一個示例:

SELECT * FROM table_that_doesnot_exist;
ERROR 1146 (42S02): Table 'table_that_doesnot_exist' doesn't exist

GET DIAGNOSTICS CONDITION 1 @state = RETURNED_SQLSTATE, @msg= MESSAGE_TEXT;

您可以使用 SELECT 語句顯示這些變數(檢索到的值)。

SELECT @state, @msg;

輸出

以上查詢產生以下輸出:

@state @msg
42S02 表'sample.table_that_doesnot_exist'不存在
廣告