Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 CASE WHEN으로 테이블 존재 여부를 부울 결과로 확인하는 방법

MySQL에서 특정 테이블의 존재 여부를 확인하려면 INFORMATION_SCHEMA.TABLES를 활용하면 됩니다. 이 시스템 뷰에는 데이터베이스 내 모든 테이블에 대한 메타 정보가 저장되어 있어, CASE WHEN 구문과 함께 사용하면 테이블이 존재하는지 여부를 TRUE/FALSE 형태의 결과로 손쉽게 얻을 수 있습니다.

1. 예제 테이블 생성하기

먼저 실습용 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (1.57 sec)

2. 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values(101,'Chris');
Query OK, 1 row affected (0.71 sec)
mysql> insert into DemoTable values(102,'David');
Query OK, 1 row affected (0.20 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+------+-------+
| Id | Name |
+------+-------+
| 101 | Chris |
| 102 | David |
+------+-------+
2 rows in set (0.00 sec)

4. CASE WHEN으로 테이블 존재 여부 확인하기

이제 핵심인 테이블 존재 여부 확인 쿼리입니다. information_schema.tables를 조회하면서 CASE WHEN 조건으로 테이블 이름이 일치하는지 검사하고, MAX 함수를 통해 단일 행의 결과로 집계합니다.

mysql> select max(case when table_name = 'DemoTable' then 'Yes the table
exist(TRUE)' else 'No(FALSE)' end) AS isTableExists
-> from information_schema.tables;

실행 결과는 다음과 같습니다.

+-------------------------------+
| isTableExists |
+-------------------------------+
| Yes the table exist(TRUE) |
+-------------------------------+
1 row in set (0.52 sec)

동작 원리 정리

  • information_schema.tables: 현재 접근 가능한 모든 테이블의 목록을 담고 있는 시스템 뷰입니다.
  • CASE WHEN: table_name이 찾고자 하는 테이블명과 일치하면 'TRUE' 문자열을, 그렇지 않으면 'FALSE' 문자열을 반환합니다.
  • MAX(): 일치하는 행이 하나라도 있으면 TRUE 값이 집계되도록 하여, 전체 결과를 한 줄로 압축합니다.

이 방식은 테이블이 실제로 존재하지 않아도 에러 없이 'No(FALSE)'라는 결과를 반환하기 때문에, 스크립트나 프로시저에서 테이블 존재 여부를 안전하게 검사할 때 유용하게 활용할 수 있습니다.