top
Loading...
13.5.4.22.SHOWWARNINGS語法
13.5.4.22. SHOW WARNINGS語法
SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS

SHOW WARNINGS顯示由上一個生成消息的語句導致的錯誤、警告和注意消息。如果上一個使用表的語句未生成消息,則什么也不顯示。SHOW ERRORS是其相關語句,只顯示錯誤。請參見13.5.4.9節,“SHOW ERRORS語法”。

對于使用一個表的每個新語句,消息清單均重新設置。

SHOW COUNT(*) WARNINGS語句顯示錯誤、警告和注意的總數。您也可以從warning_count變量中找回此數目。

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

如果max_error_count系統變量設置得過低,以致于有的消息沒有被存儲,則warning_count值可能比由SHOW WARNINGS顯示的消息數目要大。本節后部顯示的例子展示了這類情況是如何發生的。

LIMIT子句具有與SELECT語句相同的語法。請參見13.2.7節,“SELECT語法”。

MySQL服務器會發回由上一個語句引起的錯誤、警告和注意的總數。如果您正在使用C API,則此值可以通過調用mysql_warning_count()來獲得。請參見25.2.3.69節,“mysql_warning_count()”。

對于如LOAD DATA INFILE等語句和如INSERT, UPDATE, CREATE TABLEALTER TABLEDML語句,會生成警告。

以下DROP TABLE語句會導致一個注意:

mysql> DROP TABLE IF EXISTS no_such_table;
mysql> SHOW WARNINGS;
+-------+------+-------------------------------+
| Level | Code | Message                       |
+-------+------+-------------------------------+
| Note  | 1051 | Unknown table 'no_such_table' |
+-------+------+-------------------------------+

以下是一個簡單的例子,顯示了對于CREATE TABLE的一個語法警告,和對于INSERT的轉換警告:

mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGSG
*************************** 1. row ***************************
  Level: Warning
   Code: 1287
Message: 'TYPE=storage_engine' is deprecated, use
         'ENGINE=storage_engine' instead
1 row in set (0.00 sec)
 
mysql> INSERT INTO t1 VALUES(10,'mysql'),(NULL,'test'),
    -> (300,'Open Source');
Query OK, 3 rows affected, 4 warnings (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 4
 
mysql> SHOW WARNINGSG
*************************** 1. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 1
*************************** 2. row ***************************
  Level: Warning
   Code: 1263
Message: Data truncated, NULL supplied to NOT NULL column 'a' at row 2
*************************** 3. row ***************************
  Level: Warning
   Code: 1264
Message: Data truncated, out of range for column 'a' at row 3
*************************** 4. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 3
4 rows in set (0.00 sec)

要存儲的錯誤、警告和注意消息的最大數目由max_error_count系統變量控制。默認情況下,該值為64。要更改您想要存儲的信息的數目,需更改max_error_count值。在下面的例子中,ALTER TABLE語句會產生三個警告消息,但是只有一個被存儲,因為max_error_count被設置為1

mysql> 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;
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> SELECT @@warning_count;
+-----------------+
| @@warning_count |
+-----------------+
|               3 |
+-----------------+
1 row in set (0.01 sec)
 
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1263 | Data truncated for column 'b' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

要禁用警告,需把max_error_count設置為0。在此情況下,warning_count仍然指示有多少警告已經發生,但是這些消息不被存儲。

您可以把SQL_NOTES會話變量設置為0,使“注意”級別的警告不被記錄。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗