[MySQL] 에러 헨들링

코린이·2025년 5월 27일

MySQL

목록 보기
17/23

✅ MySQL 에러

MySQL에서 에러는 크게 세 가지로 구분된다.

  • Global Error : Server Error + Client Error 공용으로 발생하는 에러
  • Server Error : MySQL 서버에서 발생하는 에러
  • Client Error : 프로그래밍 언어별 커넥터에서 발생하는 에러

MySQL에서 에러 문구는 아래처럼 반환되며, 각 구조는 다음과 같다.

ERROR <에러코드> (<SQL State>): Error Message
ERROR 1062 (23000): Duplicate entry...

▶︎ 에러 코드

MySQL 에러는 에러 코드별로 구분지어 확인 할 수 있다.

  • 1 ~ 999 : Global Error
  • 1000 ~ 1999 : Server Error
  • 2000 ~ 2999 : Client Error
  • 3000 ~ : Server Error
  • MY-010000 ~ : Server Error (MySQL 8.0 이후 추가된 에러)

MySQL은 다양한 스토리지 엔진(InnoDB, MyISAM 등)을 지원하는 구조이기 때문에, 동일한 SQL 동작이라도 스토리지 엔진에 따라 반환되는 에러 코드가 달라질 수 있다.

이처럼 스토리지 엔진에 따라 에러 발생 유무나 반환 코드가 달라질 수 있기 때문에, MySQL에서는 에러 코드에 지나치게 의존한 에러 핸들링은 지양하는게 좋다.

▶︎ SQL State

SQLSTATE는 5자리의 영문자 또는 숫자로 구성된 표준화된 에러 코드 체계로, ANSI SQL 표준에서 정의한 DBMS(데이터베이스 관리 시스템) 에러 코드이다.

  • 앞 두 글자
    • 00 : 정상
    • 01 : 경고
    • 02 : 레코드 없음
    • HY : 표준 분류가 안 된 상태
    • 그외 : 에러
  • 뒷 세 글자
    주로 숫자값이며, 각 분류에 대한 상세 에러 코드값을 가지고 있다.

SQL State는 ANSI SQL의 표준 에러 코드이기 때문에 동일한 에러에 대해 일정한 SQL State을 반환한다. 이러한 이유로 에러 헨들링시에는 SQL State 코드를 활용하는게 가장 이상적이다.
(단, HY 코드는 주의하고 사용해야 하며, 이 경우에는 에러 코드을 사용하는게 좋다)

▶︎ Error Message

사람이 읽을 수 있는 에러 메시지이다. Error Message는 MySQL 버전에 따라 다르게 출력될 수 있다. 이러한 이유로 Error Message를 사용한 서비스 개발은 지양하는게 좋다.

0개의 댓글