• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SHOW WARNINGS语句

    SHOW WARNINGS [LIMIT [offset,] row_count]
    SHOW COUNT(*) WARNINGS
    

    SHOW WARNINGS是诊断语句,显示有关在当前会话中执行语句所导致的条件(错误,警告和注释)的信息。警告DML语句诸如产生INSERTUPDATELOAD DATA以及DDL语句如CREATE TABLEALTER TABLE

    LIMIT子句与该语句具有相同的语法SELECT。请参见“ SELECT语句”。

    SHOW WARNINGS以下还用于EXPLAIN显示生成的扩展信息EXPLAIN。请参见“扩展的EXPLAIN输出格式”。

    SHOW WARNINGS显示有关由于当前会话中执行最新的非诊断性语句而导致的条件的信息。如果最新的语句在解析过程中导致错误,请SHOW WARNINGS显示结果条件,无论语句类型(诊断或非诊断)如何。

    SHOW COUNT(*)WARNINGS诊断语句显示错误,警告和注意事项的总数。您还可以从warning_count系统变量中检索此数字:

    SHOW COUNT(*) WARNINGS;
    SELECT @@warning_count;
    

    这些语句的不同之处在于,第一个是不清除消息列表的诊断语句。第二个,因为它是一条SELECT语句,被认为是非诊断性的,并且确实清除了消息列表。

    相关的诊断语句,SHOW ERRORS仅显示错误情况(不包括警告和注释),SHOW COUNT(*)ERRORS该语句显示错误总数。请参见“ SHOW ERRORS语句”。GET DIAGNOSTICS可用于检查各个条件的信息。请参见“GET DIAGNOSTICS语句”。

    这是一个简单的示例,显示的数据转换警告INSERT。该示例假定禁用了严格的SQL模式。启用严格模式后,警告将变为错误并终止INSERT

    mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4));
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> INSERT INTO t1 VALUES(10,'mysql'), (NULL,'test'), (300,'xyz');
    Query OK, 3 rows affected, 3 warnings (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 3
    
    mysql> SHOW WARNINGS\G
    *************************** 1. row 	***************************
      Level	: Warning
       Code	: 1265
    Message	: Data truncated for column 'b' at row 1
    	*************************** 2. row 	***************************
      Level	: Warning
       Code	: 1048
    Message	: Column 'a' cannot be null
    	*************************** 3. row 	***************************
      Level	: Warning
       Code	: 1264
    Message	: Out of range value for column 'a' at row 3
    3 rows in set (0.00 sec)
    

    所述max_error_count系统变量控制错误,警告和音符信息的最大数量的量,服务器存储的信息,并且因此,该消息数SHOW WARNINGS显示器。要更改服务器可以存储的消息数,请更改的值max_error_count

    max_error_count仅控制存储多少消息,而不控制计数多少。即使生成的消息数超过,的值warning_count也不受限制。以下示例对此进行了演示。该语句产生三个警告消息(此示例禁用了严格的SQL模式,以防止在单个转换问题后发生错误)。由于已将其设置为1,因此仅存储和显示一条消息,但所有这三条消息均被计数(如的值所示):max_error_countmax_error_countALTER TABLEmax_error_countwarning_count

    mysql> SHOW VARIABLES LIKE 'max_error_count';
    +-----------------	+-------	+
    | Variable_name   	| Value 	|
    +-----------------	+-------	+
    | max_error_count 	| 1024  	|
    +-----------------	+-------	+
    1 row in set (0.00 sec)
    
    mysql> SET max_error_count=1, sql_mode = '';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> ALTER TABLE t1 MODIFY b CHAR;
    Query OK, 3 rows affected, 3 warnings (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 3
    
    mysql> SHOW WARNINGS;
    +---------	+------	+----------------------------------------	+
    | Level   	| Code 	| Message                                	|
    +---------	+------	+----------------------------------------	+
    | Warning 	| 1263 	| Data truncated for column 'b' at row 1 	|
    +---------	+------	+----------------------------------------	+
    1 row in set (0.00 sec)
    
    mysql> SELECT @@warning_count;
    +-----------------	+
    | @@warning_count 	|
    +-----------------	+
    |               3 	|
    +-----------------	+
    1 row in set (0.01 sec)
    

    要禁用消息存储,请将其设置max_error_count为0。在这种情况下,warning_count仍指示发生了多少警告,但是消息未存储且无法显示。

    sql_notes系统变量控制是否说明消息增量warning_count和服务器是否将它们存储。默认情况下sql_notes为1,但是如果设置为0,则注释不会递增warning_count,并且服务器不会存储它们:

    mysql> SET sql_notes = 1;
    mysql> DROP TABLE IF EXISTS test.no_such_table;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql> SHOW WARNINGS;
    +-------	+------	+------------------------------------	+
    | Level 	| Code 	| Message                            	|
    +-------	+------	+------------------------------------	+
    | Note  	| 1051 	| Unknown table 'test.no_such_table' 	|
    +-------	+------	+------------------------------------	+
    1 row in set (0.00 sec)
    
    mysql> SET sql_notes = 0;
    mysql> DROP TABLE IF EXISTS test.no_such_table;
    Query OK, 0 rows affected (0.00 sec)
    mysql> SHOW WARNINGS;
    Empty set (0.00 sec)
    

    MySQL服务器向每个客户端发送一个计数,该计数指示该客户端执行的最新语句导致的错误,警告和注释的总数。在C API中,可以通过调用获取此值mysql_warning_count()。请参见“ mysql_warning_count()”。

    mysql客户端中,您可以分别使用warningsnowarning命令或它们的快捷方式\W\w(启用和禁用自动警告显示)(请参见“ mysql客户端命令”)。例如:

    mysql> \W
    Show warnings enabled.
    mysql> SELECT 1/0;
    +------	+
    | 1/0  	|
    +------	+
    | NULL 	|
    +------	+
    1 row in set, 1 warning (0.03 sec)
    
    Warning (Code 1365): Division by 0
    mysql> \w
    Show warnings disabled.