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'不存在
广告

© . All rights reserved.