Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.7.5.41 SHOW WARNINGS 構文

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

SHOW WARNINGS は、現在のセッションでのステートメントの実行の結果として得られた条件 (エラー、警告、および注意) に関する情報を表示する診断ステートメントです。警告は、INSERTUPDATELOAD DATA INFILE などの DML ステートメントのほか、CREATE TABLEALTER TABLE などの DDL ステートメントに対して生成されます。

LIMIT 句の構文は、SELECT ステートメントの場合と同じです。セクション13.2.9「SELECT 構文」を参照してください。

SHOW WARNINGS はまた、EXTENDED キーワードが使用されている EXPLAIN によって生成された追加の情報を表示するために、EXPLAIN EXTENDED のあとにも使用されます。セクション8.8.3「EXPLAIN EXTENDED 出力フォーマット」を参照してください。

SHOW WARNINGS は、メッセージを生成した、現在のセッションでの最新のステートメントの結果として得られた条件に関する情報を表示します。最新のステートメントがテーブルを使用し、メッセージを生成しなかった場合は、何も表示しません。(つまり、テーブルを使用するが、メッセージを生成しないステートメントはメッセージリストをクリアします。) テーブルを使用せず、メッセージを生成しないステートメントは、メッセージリストに影響を与えません。

SHOW COUNT(*) WARNINGS 診断ステートメントは、エラー、警告、および注意の総数を表示します。この数はまた、warning_count システム変数からも取得できます。

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

関連する診断ステートメント SHOW ERRORS はエラー状態のみ (警告と注意は除外されます) を表示し、SHOW COUNT(*) ERRORS ステートメントはエラーの総数を表示します。セクション13.7.5.18「SHOW ERRORS 構文」を参照してください。GET DIAGNOSTICS を使用すると、個々の条件に関する情報を検査できます。セクション13.6.7.3「GET DIAGNOSTICS 構文」を参照してください。

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 の値を変更します。デフォルトは 64 です。

max_error_count は、カウントされるメッセージの数ではなく、格納されるメッセージの数のみを制御します。生成されたメッセージの数が max_error_count を超えた場合でも、warning_count の値は max_error_count によって制限されません。この点について次の例で説明します。この ALTER TABLE ステートメントは、3 つの警告メッセージを生成します (この例では、変換の問題が 1 つ発生したあとにエラーが発生しないように、厳密な SQL モードが無効になっています)。max_error_count が 1 に設定されたため、格納されて表示されたメッセージは 1 つだけですが、warning_count の値で示されているように 3 つすべてがカウントされています。

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, 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() を呼び出すことによって取得できます。セクション23.8.7.73「mysql_warning_count()」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.