SHOW WARNINGS语句
SHOW WARNINGS [LIMIT [offset,] row_count]SHOW COUNT(*)WARNINGS
SHOW WARNINGS
是诊断语句,显示有关在当前会话中执行语句所导致的条件(错误,警告和注释)的信息。警告DML语句诸如产生INSERT
,UPDATE
和LOAD DATA
以及DDL语句如CREATE TABLE
和ALTER 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 t1VALUES (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_count
max_error_count
ALTER TABLE
max_error_count
warning_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 t1MODIFY 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客户端中,您可以分别使用warnings
和nowarning
命令或它们的快捷方式\W
和\w
(启用和禁用自动警告显示)(请参见“ mysql客户端命令”)。例如:
mysql> \WShow warnings enabled. mysql>SELECT 1/0; +------ + | 1/0 | +------ + | NULL | +------ + 1 row in set, 1 warning (0.03 sec) Warning (Code 1365): Divisionby 0 mysql> \wShow warnings disabled.