[MySQL] Show Warning, Show Error 명령
- Databases/MySQL
- 2020. 10. 25.
■ SHOW WARNINGS 명령문
SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS
SHOW WARNINGS는 현재 세션에서 명령문을 실행하여 발생하는 조건(오류, 경고 및 참고)에 대한 정보를 표시하는 진단 명령문입니다. INSERT, UPDATE 및 LOAD DATA와 같은 DML문과 CREATE TABLE 및 ALTER TABLE과 같은 DDL문에 대해 경고가 생성됩니다.
LIMIT절은 SELECT문과 동일한 구문을 갖습니다.
EXPLAIN에 따라 생성 된 확장 정보를 표시하기 위해 EXPLAIN에 따라 SHOW WARNINGS도 사용됩니다. 링크-https://myinfrabox.tistory.com/81?category=829169
SHOW WARNINGS는 현재 세션에서 가장 최근의 비 진단 명령문 실행으로 인한 조건에 대한 정보를 표시합니다. 구문 분석 중에 가장 최근의 명령문으로 인해 오류가 발생하면 SHOW WARNINGS는 명령문 유형 (진단 또는 비 진단)에 관계없이 결과 조건을 표시합니다.
SHOW COUNT (*) WARNINGS 진단 명령문은 총 오류, 경고 및 참고 수를 표시합니다. warning_count 시스템 변수에서 이 번호를 검색 할 수도 있습니다.
SHOW COUNT(*) WARNINGS;
SELECT @@warning_count;
이러한 설명의 차이점은 첫번째는 메시지 목록을 지우지 않는 진단 설명이라는 것입니다. 두 번째는 SELECT 문이기 때문에 비 진단으로 간주되며 메시지 목록을 지웁니다.
관련 진단 문인SHOW ERRORS는 오류조건만 표시하고 (경고 및 참고 사항은 제외) SHOW COUNT (*) ERRORS 문은 총 오류수를 표시합니다. 아래 SHOW ERRORS 명령문을 참고합니다. GET DIAGNOSTICS를 사용하여 개별 조건에 대한 정보를 검사 할 수 있습니다.
다음은 INSERT에 대한 데이터 변환 경고를 보여주는 간단한 예입니다. 이 예에서는 엄격한 SQL 모드가 비활성화되어 있다고 가정합니다. 엄격 모드를 사용하면 경고가 아닌 오류가 발생되고 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 문은 세 가지 경고 메시지를 생성합니다(단일 변환 문제 후에 오류가 발생하지 않도록 이 예에서는 엄격한 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()를 호출하여 얻을 수 있습니다.
In the mysql client, you can enable and disable automatic warnings display using the warnings and nowarning commands, respectively, or their shortcuts, \W and \w (see Section 4.5.1.2, “mysql Client Commands”). For example:
mysql 클라이언트에서 각각 경고 및 경고 명령 또는 바로 가기 \W 및 \w를 사용하여 자동 경고 표시를 활성화 및 비활성화 할 수 있습니다. 예를 들면 다음과 같습니다.
mysql> \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.
■ SHOW ERRORS 명령문
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW COUNT(*) ERRORS
SHOW ERRORS는 SHOW WARNINGS와 유사한 진단 설명으로, 오류, 경고 및 참고가 아닌 오류에 대한 정보 만 표시한다는 점이 다릅니다.
LIMIT 절은 SELECT 문과 동일한 구문을 갖습니다. 결과 레코드 출력수를 나타냅니다.
SHOW COUNT (*) ERRORS 문은 오류 수를 표시합니다. error_count 변수에서 이 숫자를 검색 할 수도 있습니다.
SHOW COUNT(*) ERRORS;
SELECT @@error_count;
오류 표시 및 error_count는 경고 또는 참고가 아닌 오류에만 적용됩니다. 다른 측면에서는 SHOW WARNINGS 및 warning_count와 유사합니다. 특히, SHOW ERRORS는 max_error_count 메시지 이상의 정보를 표시 할 수 없으며 error_count가 max_error_count를 초과하면 error_count가 max_error_count 값을 초과 할 수 있습니다.
'Databases > MySQL' 카테고리의 다른 글
[MySQL] Table Column 정보확인 (0) | 2020.10.27 |
---|---|
[MySQL] SHOW VARIABLES 명령 (0) | 2020.10.26 |
[MySQL] 테이블 정보와 컬럼정보 그리고 테이블 상태 명령 (0) | 2020.10.21 |
[MySQL] 양방향 암호화기법-AES_ENCRYPT n AES_DECRPYT (0) | 2020.10.19 |
[MySQL] SHOW ENGINE과 SHOW ENGINES 명령 (0) | 2020.10.17 |