• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    1. BEGIN ... END 복합 명령문 구문
    2. 레이블 구문
    3. DECLARE 구문
    4. 저장 프로그램 내의 변수
    5. 흐름 제어문
    6. 커서
    7. 조건의 처리
    1. DECLARE ... CONDITION 구문
    2. DECLARE ... HANDLER 구문
    3. GET DIAGNOSTICS 구문
    4. RESIGNAL 구문
    5. SIGNAL 구문
    6. 핸들러의 범위에 관한 규칙
    7. MySQL의 진단 영역
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.6.7.7 MySQL의 진단 영역

SQL 문은 진단 영역을 채우는 진단 정보를 생성합니다. 표준 SQL에는 중첩 된 실행 컨텍스트 별 진단 영역을 포함한 진단 영역 스택이 있습니다. 표준 SQL은 또한 조건 핸들러의 실행 중에 두 번째 진단 영역을 참조하는 GET STACKED DIAGNOSTICS 구문도 지원하고 있습니다. MySQL은 MySQL 5.7까지 STACKED 키워드를 지원하지 않습니다. MySQL 5.6에서는 진단 영역에 쓰기를 행한 최근의 문에서 정보를 포함하는 하나의 진단 영역이 존재합니다.

이 섹션에서는 MySQL의 진단 영역의 구조, MySQL에 의해 인식되는 정보 항목 및 문 진단 영역을 클리어하고 구성하는 방법에 대해 설명합니다.

13.6.7.7.1 진단 영역의 구조

진단 영역에는 다음의 2 종류의 정보가 포함되어 있습니다.

  • 발생 조건의 수와 영향을받은 행수 등의 문 정보.

  • 오류 코드 및 메시지 등의 조건 정보. 문이 여러 조건을 발생시킨 경우 진단 영역이 부분에는 각 조건의 조건 영역이 포함되어 있습니다. 문이 어떤 조건도 발생시키지 않는 경우 진단 영역이 부분은 비어 있습니다.

3 개의 조건을 생성하는 명령문의 경우 진단 영역에는 다음과 같은 명령문 정보와 조건 정보가 포함되어 있습니다.

 Statement information :
   row count
   ... other statement information items ...
 Condition area list :
   Condition area 1 :
     error code for condition 1
     error message for condition 1
     ... other condition information items ...
   Condition area 2 :
     error code for condition 2 :
     error message for condition 2
     ... other condition information items ...
   Condition area 3 :
     error code for condition 3
     error message for condition 3
     ... other condition information items ...
13.6.7.7.2 진단 영역의 정보 항목

진단 영역에는 문 정보와 조건 정보 항목이 포함되어 있습니다. 수치 항목은 정수입니다. 문자 항목의 문자 세트는 UTF-8입니다. 어떤 항목도 NULL 은 없습니다. 진단 영역을 채우는 문에서 문 또는 조건 항​​목이 설정되어 있지 않은 경우, 그 값은 해당 항목의 데이터 형식에 따라 0 또는 빈 문자열입니다.

진단 영역의 문 정보 부분에는 다음 항목이 포함되어 있습니다.

  • NUMBER : 정보가 포함되어있는 조건 영역의 수를 나타내는 정수입니다.

  • ROW_COUNT :이 문에 의해 영향을받은 행 수를 나타내는 정수입니다. ROW_COUNT 는 ROW_COUNT() 함수와 같은 값이 포함되어 있습니다 ( 섹션 12.14 "정보 함수" 를 참조하십시오).

진단 영역의 조건 정보 부분에는 각 조건의 조건 영역이 포함되어 있습니다. 조건 영역에는 1에서 NUMBER 문 조건 항목 값의 번호가 매겨져 있습니다. NUMBER 가 0 인 경우, 조건 영역은 존재하지 않습니다.

각 조건 영역에는 다음 목록의 항목이 포함되어 있습니다. MySQL 확장이다 MYSQL_ERRNO 을 제외한 모든 항목이 표준 SQL입니다. 이러한 정의는 신호 이외 의해 (즉, SIGNAL 또는 RESIGNAL 문에 의해) 생성 된 조건에 적용됩니다. 신호 이외의 조건의 경우 MySQL은 항상 비어있는 것으로 표시되지 않은 조건 항​​목 만 채 웁니다. 조건 영역에 대한 신호의 영향에 대해서는 나중에 설명되어 있습니다.

  • CLASS_ORIGIN RETURNED_SQLSTATE 값의 클래스가 포함 된 문자열. RETURNED_SQLSTATE 값이 SQL 표준 문서 ISO 9075-2 (섹션 24.1, SQLSTATE)에서 정의 된 클래스 값으로 시작하면 CLASS_ORIGIN 은 'ISO 9075' 입니다. 그렇지 않으면, CLASS_ORIGIN 는 'MySQL' 입니다.

  • SUBCLASS_ORIGIN : RETURNED_SQLSTATE 값의 서브 클래스를 포함하는 문자열. CLASS_ORIGIN 이 'ISO 9075' 이거나 또는 RETURNED_SQLSTATE 가 '000' 로 끝나는 경우 SUBCLASS_ORIGIN 은 'ISO 9075' 입니다. 그렇지 않으면, SUBCLASS_ORIGIN 는 'MySQL' 입니다.

  • RETURNED_SQLSTATE :이 조건 SQLSTATE 값을 나타내는 문자열입니다.

  • MESSAGE_TEXT :이 조건의 오류 메시지를 나타내는 캐릭터 라인.

  • MYSQL_ERRNO :이 조건의 MySQL 에러 코드를 나타내는 정수입니다.

  • CONSTRAINT_CATALOG , CONSTRAINT_SCHEMA , CONSTRAINT_NAME : 위반 한 제약 카탈로그, 스키마 및 이름을 나타내는 문자열입니다. 이들은 항상 비어 있습니다.

  • CATALOG_NAME , SCHEMA_NAME , TABLE_NAME , COLUMN_NAME :이 조건에 관련된 카탈로그, 스키마, 테이블 및 컬럼을 나타내는 문자열입니다. 이들은 항상 비어 있습니다.

  • CURSOR_NAME : 커서 이름을 나타내는 문자열입니다. 이것은 항상 비어 있습니다.

RETURNED_SQLSTATE , MESSAGE_TEXT 및 MYSQL_ERRNO 값의 특정 오류 내용은 섹션 B.3 "서버 오류 코드 및 메시지" 를 참조하십시오.

SIGNAL (또는 RESIGNAL ) 문이 진단 영역을 채우는 경우 SET 절은 RETURNED_SQLSTATE 을 제외한 모든 조건 정보 항목에 해당 항목의 데이터 형식에 대해 정당한 임의의 값을 할당 할 수 있습니다. SIGNAL 또한 RETURNED_SQLSTATE 값도 설정하지만, 그 SET 절에서 직접 설정하는 것은 아닙니다. 그 값은 SIGNAL 문 SQLSTATE 인수에서 검색됩니다.

SIGNAL 은 문 정보 항목을 설정합니다. NUMBER 를 1로 설정하고 ROW_COUNT 내용은 오류의 경우는 -1, 그렇지 않으면 0으로 설정합니다.

13.6.7.7.3 진단 영역이 이입되는 방법

진단 제외한 대부분의 SQL 문은 진단 영역을 자동으로 채 웁니다 만, 그 내용은 SIGNAL 및 RESIGNAL 문을 사용하여 명시 적으로 설정할 수 있습니다. 진단 영역은 특정 항목을 추출하기 위해 GET DIAGNOSTICS 를 사용하여 또는 조건 또는 오류를 확인하기 위해 SHOW WARNINGS 또는 SHOW ERRORS 를 사용하여 확인할 수 있습니다.

SQL 문은 다음과 같이 진단 영역을 클리어 및 설정합니다.

  • 서버가 문을 분석하고 그 실행을 시작할 때 테이블을 사용하는 진단 이외의 문은 진단 영역을 지 웁니다. 진단 문 진단 영역을 삭제하지 않습니다 ( SHOW WARNINGS , SHOW ERRORS , GET DIAGNOSTICS ).

  • 문이 조건을 발생시킨 경우에는 이전 문에 속하는 조건의 진단 영역이 클리어됩니다. 예외적으로 GET DIAGNOSTICS 및 RESIGNAL 의해 발생 조건은 진단 영역에 그 영역을 클리어하지 않고 추가됩니다.

따라서 일반적으로 시작될 때 진단 영역을 클리어하지 않으면 문에도 그 문이 조건을 발생시킨 경우 진단 영역을 지 웁니다.

다음의 예는 진단 영역에 대한 다양한 문의 영향을 SHOW WARNINGS 을 사용하여 거기에 저장되어있는 조건에 대한 정보를 표시하여 보여줍니다.

다음 DROP TABLE 문은 테이블을 사용하기 때문에 진단 영역을 클리어 조건이 발생하면 그것을 채 웁니다.

mysql> DROP TABLE IF EXISTS test.no_such_table;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> SHOW WARNINGS;
+-------+------+------------------------------------+
| Level | Code | Message                            |
+-------+------+------------------------------------+
| Note  | 1051 | Unknown table 'test.no_such_table' |
+-------+------+------------------------------------+
1 row in set (0.00 sec)

다음 SET 문은 테이블을 사용하지 않고 경고도 생성하지 않기 때문에 진단 영역을 변경되지 않은 상태로합니다.

mysql> SET @x = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+------------------------------------+
| Level | Code | Message                            |
+-------+------+------------------------------------+
| Note  | 1051 | Unknown table 'test.no_such_table' |
+-------+------+------------------------------------+
1 row in set (0.00 sec)

다음 SET 문은 오류를 생성하기 위해 진단 영역을 지우고 채 웁니다.

mysql> SET @x = @@x;
ERROR 1193 (HY000): Unknown system variable 'x'

mysql> SHOW WARNINGS;
+-------+------+-----------------------------+
| Level | Code | Message                     |
+-------+------+-----------------------------+
| Error | 1193 | Unknown system variable 'x' |
+-------+------+-----------------------------+
1 row in set (0.00 sec)

이전 SET 문은 하나의 조건을 생성했기 때문에 1이이 시점에서 GET DIAGNOSTICS 의 유일한 유효한 조건 번호입니다. 다음 문은 두 조건 번호를 사용하고 있습니다. 따라서 진단 영역에 그 영역을 클리어하지 않고 추가되는 경고가 생성됩니다.

mysql> GET DIAGNOSTICS CONDITION 2 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+------------------------------+
| Level | Code | Message                      |
+-------+------+------------------------------+
| Error | 1193 | Unknown system variable 'xx' |
| Error | 1753 | Invalid condition number     |
+-------+------+------------------------------+
2 rows in set (0.00 sec)

이제 진단 영역에는 두 가지 조건이 존재하게 되었기 때문에, 같은 GET DIAGNOSTICS 문이 성공합니다.

mysql> GET DIAGNOSTICS CONDITION 2 @p = MESSAGE_TEXT;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @p;
+--------------------------+
| @p                       |
+--------------------------+
| Invalid condition number |
+--------------------------+
1 row in set (0.01 sec)
13.6.7.7.4 진단 영역 관련 시스템 변수

특정 시스템 변수가 진단 영역의 여러 측면을 제어하거나 그와 관련되어 있습니다.

  • max_error_count 진단 영역의 조건 영역의 수를 제어합니다. 더 많은 조건이 발생했을 경우, MySQL은 초과 한 조건에 관한 정보를 암묵적으로 파기합니다. ( RESIGNAL 의해 추가 된 조건은 항상 추가됩니다. 여유를 만들기 위해 기존 조건이 필요한 경우 삭제됩니다.)

  • warning_count 는 발생 조건의 수를 나타냅니다. 여기에는 오류, 경고 및주의가 포함되어 있습니다. 일반적으로 NUMBER 및 warning_count 은 동일합니다. 그러나 생성 된 조건의 수가 max_error_count 을 초과하면 진단 영역은 더 조건이 저장되지 않으므로 warning_count 값이 계속 늘어나는 대해 NUMBER 는 max_error_count 에 상한이 설정된 상태로 유지 합니다.

  • error_count 은 발생한 오류의 수를 나타냅니다. 이 값은 "누락"과 예외 조건이 포함되지만, 경고 및주의는 제외됩니다. warning_count 과 마찬가지로, 그 값은 max_error_count 을 초과 할 수 있습니다.

  • sql_notes 시스템 변수가 0으로 설정되어있는 경우주의는 저장되지 않고 warning_count 도 증가하지 않습니다.

예 : max_error_count 가 10 인 경우, 진단 영역에는 최대 10 개의 조건부 영역을 포함 할 수 있습니다. 문이 20 개의 조건을 생성하고 그 중 12 개가 오류라고합니다. 이 경우 진단 영역에는 처음 10 개의 조건이 포함되어 NUMBER 는 10 warning_count 은 20 error_count 는 12입니다.

max_error_count 값을 변경해도 다음 진단 영역을 변경하려고 할 때까지는 아무런 효과도 없습니다. 진단 영역에 10 개의 조건 영역이 포함되어있을 때 max_error_count 이 5로 설정 된 경우 그 진단 영역의 크기 또는 내용에 즉각적인 영향은 아무것도 없습니다.

MySQL 5.6 이전에는 문 정보 항목을 직접 사용할 수 없습니다. ROW_COUNT 는 ROW_COUNT() 함수를 호출함으로써 얻을 수 있습니다. NUMBER 는 warning_count 시스템 변수의 값에 의해 근사됩니다. 그러나 NUMBER 가 max_error_count 값에 상한이 설정되는 반면 warning_count 에는 제한이 없습니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved