MySQL에서 특정 테이블이 데이터베이스에 이미 존재하는지 확인해야 하는 경우가 종종 있습니다. 예를 들어, 테이블을 생성하기 전에 중복 생성 오류를 방지하고 싶거나, 스크립트 실행 전에 테이블 상태를 점검하고 싶을 때 유용합니다.
이럴 때 INFORMATION_SCHEMA.TABLES 뷰를 조회하면 간단하게 확인할 수 있습니다. INFORMATION_SCHEMA는 MySQL 서버 내 모든 데이터베이스의 메타데이터(테이블, 컬럼, 인덱스 등) 정보를 담고 있는 시스템 스키마입니다.
기본 문법
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'yourDatabaseName' AND TABLE_NAME = 'yourTableName';
- TABLE_SCHEMA: 조회하려는 데이터베이스(스키마) 이름
- TABLE_NAME: 존재 여부를 확인하려는 테이블 이름
테이블이 존재하면 해당 테이블 이름이 결과로 반환되고, 존재하지 않으면 빈 결과 집합(Empty set)이 반환됩니다.
실제 사용 예시
Case 1: 테이블이 존재하는 경우
'sample' 데이터베이스에 'DemoTable'이라는 테이블이 있는지 확인해 보겠습니다.
mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sample' AND TABLE_NAME = 'DemoTable';
실행 결과는 다음과 같습니다.
+--------------+ | TABLE_NAME | +--------------+ | DemoTable | +--------------+ 1 row in set (0.01 sec)
테이블이 존재하기 때문에 테이블 이름이 정상적으로 출력되었습니다.
Case 2: 테이블이 존재하지 않는 경우
이번에는 존재하지 않는 테이블 'DemoTable2'를 조회해 보겠습니다.
mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sample' AND TABLE_NAME = 'DemoTable2';
실행 결과는 다음과 같습니다.
Empty set (0.01 sec)
테이블이 없으므로 아무런 행도 반환되지 않습니다.
응용: CREATE TABLE IF NOT EXISTS와 함께 활용
애플리케이션 코드나 저장 프로시저에서 이 쿼리의 결과를 조건문으로 활용하면, 테이블이 없을 때만 생성하는 로직을 구현할 수 있습니다. 참고로 MySQL 5.0 이상에서는 CREATE TABLE IF NOT EXISTS 구문을 사용해 더 간단하게 처리할 수도 있지만, 테이블 존재 여부 자체를 프로그램에서 판별해야 하는 경우에는 위의 INFORMATION_SCHEMA 조회 방식이 가장 확실한 방법입니다.