MySQL 테이블 존재 여부 확인 과정을 거치고 그 존재 여부에 따른 상황 판단 작업이 필요하여 코드를 작성하게되었습니다. (한마디로 IF/ELSE문 입니다.)


개발 환경은 JAVA/SPRING, MySQL, Mybatis 입니다.


1. 테이블 존재 여부를 확인하여야 한다.


2. 테이블 존재 여부를 확인한 후,

->존재한다면 SELECT문을 한번더 실행

->존재하지 않는다면 0을 리턴


하는 코드값이 필요하였습니다.


#테이블 존재여부 쿼리

1
2
3
4
5
SELECT COUNT(*) #카운트 결과값이 0 이면 존재X, 1 이상 존재O
FROM information_schema.TABLES
WHERE
    TABLE_SCHEMA = 'DB 이름'
    AND TABLE_NAME = '테이블 이름'
cs



존재여부를 파악한 뒤, 처음 시도는 프로시저형식으로 시도를하였으나 제가사용하고있는 MySQL은 MyBatis에서 변수 선언식으로 동작을 하지않아 다른방법을 택하였습니다.


두가지 방법다 필요하신분이 있을수도 있어 같이 포스팅 합니다.


#변수 선언 - 1안

1
2
3
4
5
6
7
8
9
SET
@test := CASE (SELECT COUNT(*
                            FROM information_schema.TABLES
                            WHERE TABLE_SCHEMA = 'DB 이름' AND TABLE_NAME = '테이블 이름'
                             )
                       WHEN 0 THEN 0 #존재하지 않는다면 0
                       ELSE (SELECT 1+1 FROM DUAL)  #ELSE 존재한다면 후 처리 쿼리
END;
SELECT @test
cs


#MyBatis 사용 IF문 쿼리 - 2안

1
2
3
4
5
6
7
8
9
SELECT IF(
            (SELECT COUNT(*
                FROM information_schema.TABLES
                WHERE
                     TABLE_SCHEMA = 'DB 이름'
                    AND TABLE_NAME = '테이블 이름'> 0 # 결과값이 0보다 크다면 테이블이 존재
                    , (SELECT 1+1 FROM DUAL) # 존재한다면 후 처리 쿼리
                    , 0 #ELSE 존재하지 않는다면 후 처리 쿼리
            ) AS CNT
cs


참고로 제가 사용하고있는 Mybatis는 3.3.0 버전 입니다.



* 참고링크

https://stackoverflow.com/questions/18738909/mysql-select-if-table-exists


반응형

+ Recent posts