MySQL의 테이블 존재 여부 확인 방법

동적으로 DB 테이블을 생성해야 하는 경우가 있습니다. 예를 들면 월 단위로 로그 테이블을 생성해서 로그를 기록해야 하는 경우도 있을 테고요. 제로보드 같은 툴에서는 게시판을 생성하면 실제로 테이블을 하나 생성하여 글을 저장합니다.

이렇게 동적으로 DB 테이블을 생성할 때에는 생성하려는 테이블의 이름과 같은 이름의 테이블이 존재하는지 확인하는 과정이 필요합니다. 확인 과정 없이 테이블을 생성하려다가 실패했을 때 예상치 못한 버그가 나타날 수 있습니다.

테이블의 존재 여부를 확인하는 방법으로는 여러 가지 방법이 있겠습니다만 몇 가지 방법을 소개하려 합니다.

SHOW TABLES

첫 번째 방법은 한 줄의 SQL 쿼리로 테이블의 존재 여부를 알 수 있습니다. 일치하는 테이블이 있다면 테이블 명을 반환하고 그렇지 않은 경우라면 값이 없을 것입니다.

SHOW TABLES FROM [DB명] LIKE ‘[TABLE명]‘;

이미 DB가 지정되어 있다면 아래와 같이 [DB명]을 생략할 수 있습니다.

SHOW TABLES LIKE ‘[TABLE명]‘;

Information_schema

두 번째 방법은 MySQL의 Information_schema를 사용하는 방법입니다. 주의할 점은 information_schema 는 MySQL 5에서 추가되었기 때문에 MySQL 4 이하에서는 사용할 수 없습니다.

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘[DB명]‘ AND table_name = ‘[TABLE명]‘;

COUNT( )함수를 사용했기 때문에 테이블이 존재하는 경우 1 , 존재하지 않는 경우 0 으로 결과값이 정확하게 나옵니다. 추가로 다음 코드처럼 Information_schema DB 를 사용하면 테이블의 상세 정보를 알 수도 있습니다.

SELECT * FROM information_schema.tables WHERE table_schema = ‘[DB명]‘ AND table_name = ‘[TABLE명]‘;

SHOW TABLES는 테이블 명만 반환하는데 반해서 information_schema DB를 이용하면 테이블에 대한 상세한 정보까지 알 수 있다는 장점이 있습니다.

참고 : http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

CREATE TABLE IF NOT EXISTS

이 방법은 테이블이 없는 경우에 테이블을 생성하게 합니다. 하지만 조금 주의해야 할 점은 혹시나 테이블 이름은 동일하지만 항목이 다른 경우라면 오류가 발생할 수 있습니다. 예를 들면 아래 두 개의 SQL 과 같은 경우 입니다.

코드 1 members 1

CREATE TABLE members ( id int , name varchar(10) ) 

코드 2 members 2

CREATE TABLE IF NOT EXISTS members ( id int , email varchar(45) )

이미 코드 1에 해당되는 테이블이 존재 한다고 했을 때, 그 후 코드 2의 테이블을 생성하려 했으나 IF NOT EXISTS 옵션으로 인해 생성하지 않았다면 항목이 전혀 다르기 때문에 문제가 될 수 있으므로 주의해야 합니다. 이런 경우가 발생할 가능성이 있다면 첫 번째나 두 번째 방법을 이용해서 테이블의 존재 여부를 미리 파악해서 예외처리를 하는 것이 좋을 것 같습니다.

추가로 아래는 information_schema DB를 이용해서 테이블을 확인하는 PHP 함수코드 입니다.

코드 3 테이블 존재 여부 확인 PHP 함수

   1: function table_exists($tablename, $database = false) {

   2:     if(!$database) {

   3:        $res = mysql_query("SELECT DATABASE()");

   4:        $database = mysql_result($res, 0);

   5:     }

   6:     $res = mysql_query("

   7:         SELECT COUNT(*) AS count

   8:         FROM information_schema.tables

   9:         WHERE table_schema = '$database'

  10:         AND table_name = '$tablename'

  11:     ");

  12:     return mysql_result($res, 0) == 1;

  13: }

코드 출처 : http://www.electrictoolbox.com/check-if-mysql-table-exists/php-function/

Tags: ,

About the Author

ooti has written 46 stories on this site.

Write a Comment

Gravatars are small images that can show your personality. You can get your gravatar for free today!

Spam Protection by WP-SpamFree

Copyright © 2010 PHPK.org. All rights reserved.
Theme by Fitobochka and ComFi.com Phone Cards Company.