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 | 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 |
示例
以下是另一个示例 -
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 | Table 'sample.table_that_doesnot_exist' doesn't exist |