[MySQL] Show Warning, Show Error 명령

■ 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 값을 초과 있습니다.

Designed by JB FACTORY