13.7.5.41 SHOW WARNINGS 구문
SHOW WARNINGS [LIMIT [offset
,]row_count
] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
은 현재 세션에서 명령문의 실행 결과로 얻은 조건 (오류, 경고 및주의)에 대한 정보를 표시하는 진단 문입니다. 경고는 INSERT
, UPDATE
, LOAD DATA INFILE
등의 DML 문 외에도 CREATE TABLE
또는 ALTER 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'can not 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 개의 경고 메시지를 생성합니다 (이 예에서는 변환 문제가 하나 발생했을 때 오류가 발생하지 않도록 엄격한 SQL 모드가 비활성화되어 있습니다). max_error_count
가 1로 설정 되었기 때문에 저장되어 표시된 메시지는 하나 뿐이지 만 warning_count
값에 표시된대로 세 가지가 카운트되어 있습니다.
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 ()" 를 참조하십시오.