MySQL을 사용하다 보면 존재하지 않는 테이블을 삭제하거나 중복 데이터를 처리할 때 다양한 경고 메시지가 출력됩니다. 이러한 경고를 화면에 표시하지 않고 억제(suppress)하고 싶다면 SQL_NOTES 시스템 변수를 활용하면 됩니다.
SQL_NOTES란 무엇인가?
SQL_NOTES는 MySQL의 세션 단위 시스템 변수로, 기본값은 1(ON)입니다. 이 값을 0(OFF)으로 설정하면 Note 수준의 경고 메시지가 더 이상 기록되거나 표시되지 않습니다. 주로 배치 작업이나 스크립트 실행 시 불필요한 경고 출력을 줄이기 위해 사용됩니다.
1단계: SQL_NOTES를 ON으로 설정하기
먼저 SQL_NOTES를 1로 설정하여 경고가 표시되는 상태를 만들어 보겠습니다.
mysql> SET sql_notes = 1;
Query OK, 0 rows affected (0.00 sec)
2단계: 존재하지 않는 테이블 삭제 시도
이제 존재하지 않는 테이블을 삭제해 보겠습니다. 아래 결과에서 확인할 수 있듯이, 경고 메시지가 함께 출력됩니다.
mysql> drop table if exists web.DemoTable;
Query OK, 0 rows affected, 1 warning (0.07 sec)
3단계: SHOW WARNINGS로 경고 내용 확인
발생한 경고의 상세 내용은 SHOW WARNINGS 명령어로 확인할 수 있습니다.
mysql> show warnings;
실행 결과는 다음과 같습니다.
+-------+------+-----------------------------------+
| Level | Code | Message |
+-------+------+-----------------------------------+
| Note | 1051 | Unknown table 'web.DemoTable' |
+-------+------+-----------------------------------+
1 row in set (0.00 sec)
'web.DemoTable'이라는 테이블이 존재하지 않는다는 Note 수준의 경고(코드 1051)가 발생한 것을 알 수 있습니다.
4단계: SQL_NOTES를 OFF로 설정하여 경고 억제하기
이제 경고를 억제하기 위해 SQL_NOTES를 0으로 설정합니다.
mysql> SET sql_notes = 0;
Query OK, 0 rows affected (0.00 sec)
설정 후 동일하게 존재하지 않는 테이블을 다시 삭제해 보겠습니다.
mysql> drop table if exists web.DemoTable;
Query OK, 0 rows affected (0.07 sec)
이전과 달리 warning 표시 없이 깔끔하게 실행된 것을 확인할 수 있습니다. 이것이 바로 MySQL에서 경고를 억제하는 방법입니다.
5단계: 경고 억제 후 SHOW WARNINGS 결과 확인
경고가 억제된 상태에서 다시 SHOW WARNINGS 명령어를 실행하면 더 이상 경고가 조회되지 않고 빈 결과(Empty set)가 반환됩니다.
mysql> show warnings;
Empty set (0.00 sec)
정리
MySQL에서 경고 메시지를 억제하는 핵심은 SET sql_notes = 0; 구문 하나입니다. 반대로 경고를 다시 보고 싶다면 SET sql_notes = 1;로 되돌리면 됩니다. 다만 이 설정은 세션 단위로 적용되므로, 새로운 연결에서는 기본값(ON)으로 초기화된다는 점을 유의해야 합니다. 자동화 스크립트나 로그 정리가 필요한 환경에서 유용하게 활용할 수 있습니다.