このページは機械翻訳したものです。
Press CTRL+C to copySHOW WARNINGS [LIMIT [offset,] row_count] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
は、現在のセッションでのステートメントの実行の結果として得られた条件 (エラー、警告、および注意) に関する情報を表示する診断ステートメントです。 INSERT
、UPDATE
、LOAD DATA
などの DML ステートメント、および CREATE TABLE
や ALTER TABLE
などの DDL ステートメントに対して警告が生成されます。
LIMIT
句の構文は、SELECT
ステートメントの場合と同じです。 セクション13.2.10「SELECT ステートメント」を参照してください。
SHOW WARNINGS
は、EXPLAIN
によって生成された拡張情報を表示するために、EXPLAIN
の後にも使用されます。 セクション8.8.3「拡張 EXPLAIN 出力形式」を参照してください。
SHOW WARNINGS
では、現行のセッションで最新の非診断ステートメントを実行した結果の条件に関する情報が表示されます。 解析中に最新のステートメントでエラーが発生した場合、SHOW WARNINGS
では、ステートメントのタイプ (診断または非診断) に関係なく、結果の条件が表示されます。
SHOW COUNT(*) WARNINGS
診断ステートメントは、エラー、警告、および注意の総数を表示します。 この数はまた、warning_count
システム変数からも取得できます。
Press CTRL+C to copySHOW COUNT(*) WARNINGS; SELECT @@warning_count;
これらのステートメントの違いは、最初のステートメントがメッセージリストをクリアしない診断ステートメントであることです。 もう一方は SELECT
ステートメントであるため、非診断とみなされ、メッセージリストはクリアされます。
関連する診断ステートメント SHOW ERRORS
はエラー状態のみ (警告と注意は除外されます) を表示し、SHOW COUNT(*) ERRORS
ステートメントはエラーの総数を表示します。 セクション13.7.7.17「SHOW ERRORS ステートメント」を参照してください。 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
の値を変更します。
max_error_count
は、カウントされるメッセージの数ではなく、格納されるメッセージの数のみを制御します。 生成されたメッセージの数が max_error_count
を超えた場合でも、warning_count
の値は max_error_count
によって制限されません。 この点について次の例で説明します。 この ALTER TABLE
ステートメントは、3 つの警告メッセージを生成します (この例では、変換の問題が 1 つ発生したあとにエラーが発生しないように、厳密な SQL モードが無効になっています)。 max_error_count
が 1 に設定されたため、格納されて表示されたメッセージは 1 つだけですが、warning_count
の値で示されているように 3 つすべてがカウントされています。
Press CTRL+C to copymysql> 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
が増分されず、またサーバーはそれらを格納しません。
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()を参照してください。
mysql クライアントでは、warnings
コマンドと 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.