MySQL에서 특수문자 '?'가 포함된 데이터베이스 삭제하기
데이터베이스 이름에 물음표(?)와 같은 특수문자가 포함되어 있으면 일반적인 방식으로는 DROP DATABASE 명령을 실행할 수 없습니다. 이 경우 데이터베이스 이름을 백틱(`) 기호로 감싸주어야 합니다. 기본 문법은 다음과 같습니다.
DROP DATABASE `yourDatabaseName`;
예제 데이터베이스 생성
먼저 문법을 이해하기 위해 '?' 문자가 포함된 데이터베이스를 하나 생성해 보겠습니다.
mysql> create database `test?data`; Query OK, 1 row affected (0.14 sec)
'?' 문자가 포함된 데이터베이스가 성공적으로 생성되었습니다. 현재 서버에 존재하는 모든 데이터베이스 목록을 확인해 보겠습니다.
mysql> show databases;
위 쿼리의 실행 결과는 다음과 같습니다.
+-----------------------+ | Database | +-----------------------+ | business | | commandline | | database1 | | databasesample | | education | | hb_student_tracker | | hello | | information_schema | | javadatabase2 | | javasampledatabase | | mybusiness | | mydatabase | | mysql | | onetomanyrelationship | | performance_schema | | rdb | | sample | | sampledatabase | | schemasample | | sys | | test | | test3 | | test?data | | universitydatabase | | web | | webtracker | +-----------------------+ 26 rows in set (0.09 sec)
목록을 보면 'test?data' 데이터베이스가 정상적으로 생성된 것을 확인할 수 있습니다.
백틱을 사용한 데이터베이스 삭제
이제 '?' 문자가 포함된 데이터베이스를 삭제하려면, 앞서 설명한 것처럼 데이터베이스 이름을 백틱(`)으로 감싸야 합니다. 삭제 쿼리는 다음과 같습니다.
mysql> drop database `test?data`; Query OK, 0 rows affected (0.32 sec)
삭제 결과 확인
삭제가 완료되었으므로, 더 이상 'test?data'라는 데이터베이스가 존재하지 않는지 확인해 보겠습니다.
mysql> show databases;
실행 결과는 다음과 같습니다.
+-----------------------+ | Database | +-----------------------+ | business | | commandline | | database1 | | databasesample | | education | | hb_student_tracker | | hello | | information_schema | | javadatabase2 | | javasampledatabase | | mybusiness | | mydatabase | | mysql | | onetomanyrelationship | | performance_schema | | rdb | | sample | | sampledatabase | | schemasample | | sys | | test | | test3 | | universitydatabase | | web | | webtracker | +-----------------------+ 25 rows in set (0.00 sec)
위 출력 결과를 보면, 이전에는 26개였던 데이터베이스가 25개로 줄었고, 'test?data' 데이터베이스가 목록에서 사라진 것을 확인할 수 있습니다.
핵심 정리
MySQL에서는 백틱(`) 기호를 사용하면 물음표(?)를 비롯한 다양한 특수문자가 포함된 데이터베이스나 테이블 이름도 자유롭게 다룰 수 있습니다. 반대로 말하면, 특수문자가 포함된 객체 이름을 참조할 때 백틱을 생략하면 SQL 구문 오류가 발생할 수 있으므로 주의해야 합니다.