Press CTRL+C to copySHOW WARNINGS [LIMIT [offset,] row_count] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
是一个诊断语句,显示有关在当前会话中执行语句所产生的条件(错误、警告和注释)的信息。为 DML 语句(例如INSERT
、
UPDATE
和
LOAD DATA
)以及 DDL 语句(例如CREATE TABLE
和)生成警告ALTER TABLE
。
该LIMIT
子句与语句具有相同的语法SELECT
。请参阅
第 13.2.9 节,“SELECT 语句”。
SHOW WARNINGS
也用在 , 后面,显示使用关键字时
EXPLAIN EXTENDED
产生的额外信息
。请参阅
第 8.8.3 节,“扩展 EXPLAIN 输出格式”。
EXPLAIN
EXTENDED
SHOW WARNINGS
显示有关由当前会话中生成消息的最新语句产生的条件的信息。如果最近的语句使用了一个表并且没有生成任何消息,它什么也不会显示。(即,使用表但不生成消息的语句清除消息列表。)不使用表且不生成消息的语句对消息列表没有影响。
诊断语句显示错误、警告和注释的SHOW COUNT(*)
WARNINGS
总数。您还可以从
warning_count
系统变量中检索此数字:
Press CTRL+C to copySHOW COUNT(*) WARNINGS; SELECT @@warning_count;
相关诊断语句SHOW
ERRORS
仅显示错误情况(不包括警告和注释),
SHOW COUNT(*)
ERRORS
语句显示错误总数。请参阅第 13.7.5.18 节,“显示错误语句”。GET
DIAGNOSTICS
可用于检查个别情况的信息。请参阅第 13.6.7.3 节,“GET DIAGNOSTICS 语句”。
这是一个简单的示例,显示了
INSERT
. 该示例假定禁用了严格的 SQL 模式。启用严格模式后,警告将变为错误并终止
INSERT
.
Press CTRL+C to copymysql> 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
。默认值为 64。
max_error_count
只控制存储多少条消息,而不控制计算多少条消息。的值warning_count
不受限制max_error_count
,即使生成的消息数超过
max_error_count
。以下示例演示了这一点。该ALTER
TABLE
语句产生三个警告消息(示例中禁用了严格的 SQL 模式,以防止在单个转换问题后发生错误)。由于设置为1,所以只存储和显示了一条消息
max_error_count
,但是三个都被统计了(如 的值所示
warning_count
):
Press CTRL+C to copymysql> SHOW VARIABLES LIKE 'max_error_count'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_error_count | 64 | +-----------------+-------+ 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
并且服务器不会存储它们:
Press CTRL+C to copymysql> 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()。
在mysqlwarnings
客户端中,您可以分别使用和nowarning
命令或其快捷方式
启用\W
和禁用自动警告显示
\w
(请参阅
第 4.5.1.2 节,“mysql 客户端命令”)。例如:
Press CTRL+C to copymysql> \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.