MySQL에서 테이블 존재 여부 확인하기
MySQL에서 특정 테이블이 실제로 존재하는지 확인하려면 INFORMATION_SCHEMA.TABLES 뷰를 활용하는 것이 가장 확실한 방법입니다. 이 시스템 뷰에는 데이터베이스 서버에 있는 모든 테이블의 메타데이터가 저장되어 있어, 테이블 이름을 조건으로 조회하면 존재 여부를 바로 알 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table Client_information
-> (
-> Id int,
-> Name varchar(10)
-> );
Query OK, 0 rows affected (0.48 sec)
테이블에 데이터 삽입하기
다음은 INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가하는 쿼리입니다.
mysql> insert into Client_information values(1,'Larry');
Query OK, 1 row affected (0.14 sec)
mysql> insert into Client_information values(2,'Mike');
Query OK, 1 row affected (0.17 sec)
mysql> insert into Client_information values(3,'Sam');
Query OK, 1 row affected (0.19 sec)
SELECT 문을 사용해 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from Client_information;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+-------+
| Id | Name |
+------+-------+
| 1 | Larry |
| 2 | Mike |
| 3 | Sam |
+------+-------+
3 rows in set (0.00 sec)
INFORMATION_SCHEMA로 테이블 존재 여부 조회
이제 information_schema.tables를 조회하여 해당 테이블이 MySQL에 존재하는지 확인하는 쿼리입니다.
mysql> select * from information_schema.tables where table_name='Client_information';
아래 결과가 출력되었다면 'Client_information' 테이블이 실제로 존재한다는 의미입니다.
+---------------+--------------+--------------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------+--------------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
| def | sample | client_information | BASE TABLE | InnoDB | 10 | Dynamic | 4 | 4096 | 16384 | 0 | 0 | 0 | NULL | 2019-03-11 20:02:40 | NULL | NULL | utf8_general_ci | NULL | | |
| def | test | client_information | BASE TABLE | InnoDB | 10 | Dynamic | 3 | 5461 | 16384 | 0 | 0 | 0 | NULL | 2019-04-03 02:28:31 | 2019-04-03 02:29:00 | NULL | utf8mb4_0900_ai_ci | NULL | | |
+---------------+--------------+--------------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
2 rows in set (0.13 sec)
결과를 살펴보면 'sample' 스키마와 'test' 스키마 두 곳에 각각 'client_information' 테이블이 존재함을 확인할 수 있습니다. 만약 조회 결과가 비어 있다면 해당 이름의 테이블이 존재하지 않는다는 뜻입니다.
참고: 더 간단한 확인 방법
전체 메타데이터가 필요 없고 단순히 존재 여부만 확인하고 싶다면 다음과 같이 필요한 컬럼만 선택하거나 COUNT를 활용할 수 있습니다.
-- 존재하면 1, 없으면 0 반환
SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = 'your_database' AND table_name = 'Client_information';
또한 SHOW TABLES LIKE 구문을 사용해도 동일하게 테이블 존재 여부를 빠르게 파악할 수 있습니다.