[MySQL] Error Handling

기훈·2024년 7월 14일

MySQL

목록 보기
12/23

Global Error

  • 언어별 드라이브에서 발생

Server Error

  • sql 서버에서 발생

Client Error

  • 언어별 드라이브나 커넥트에서 발생

MySQL 에러 포맷

mysql> INSERT INTO user ...
ERROR 1062 (23000): Duplicate entru 'abc...' for key 'ux_email'
  • 에러포맷은 3개의 파트로 구성 (Error No, SQLState, Error Message)

Error No

  • 에러 번호의 구분
    - 1 ~ 999 Global Error
    • 1000 ~ 1999 Server Error
    • 2000 ~ 2999 Client Error
    • 3000 ~ Server Error
    • MY-01000 Server Error
  • 스토리지 엔진에 종속적인 경우가 많아 같은 오류여도 엔진별로 번호가 다를 수 있기 때문에 에러처리에 적합하지 않음

SQLState

  • 5글자 영문 숫자로 구성

  • ANSI-SQL에서 제정한 Vendor 비 의존적 에러 코드

  • SQL-STATE는 두 파트로 구분
    - 앞 두글자: 상태값의 분류

    • 00: 정상
    • 01: 경고
    • 02: 레코드 없음
    • HY: ANSI-SQL에서 아직 분류하지 못한 값
    • 나머지는 모두 에러
    • 뒷 세 글자: 주로 숫자 값이며, 각 분류별 상세 에러 코드 값
  • 동일 에러에 대해서, 다양한 에러 번호와 메세지를 가지지만 SQL-STATE는 동일함

  • MySQL 서버의 스토리지 엔진간의 호환성 제공

  • 다른 Vendor DBMS와의 호환성도 제공

  • 만약 HY(미분류 상태)인 경우 버전 업그레이드시 새로운 SQL State로 변경 가능하기 때문에, 이런 경우 Error No를 이용해서 에러처리를 권장한다.

Error Message

  • 사람이 인식할 수 있는 메세지
  • 같은 오류여도 버전별로 메세지가 다르기 때문에 에러 처리용으로 추천하지 않는다.

0개의 댓글