문제 상황: 예약 키워드 "groups"로 인한 MySQL 구문 오류
MySQL에서 테이블을 생성할 때 예약 키워드(reserved keyword)를 테이블 이름으로 그대로 사용하면 구문 오류가 발생합니다. 대표적인 예가 바로 "groups"입니다. "groups"는 MySQL에서 예약된 키워드이기 때문에 일반적인 방식으로는 테이블 이름으로 사용할 수 없습니다.
실제로 "groups"라는 이름으로 테이블을 생성하려고 하면 다음과 같은 오류가 발생합니다.
mysql> create table groups -> ( -> id int, -> name varchar(40) -> ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups ( id int, name varchar(40) )' at line 1
위와 같이 ERROR 1064 구문 오류가 출력되며, 테이블 생성에 실패하게 됩니다.
해결 방법: 백틱(Backticks) 사용하기
예약 키워드를 테이블 이름으로 사용하려면 백틱(backtick, `)으로 이름을 감싸주면 됩니다. 백틱은 MySQL에게 해당 문자열을 식별자(identifier)로 취급하도록 지시하는 역할을 합니다.
백틱을 적용하여 다시 테이블을 생성해 보겠습니다.
mysql> create table `groups` -> ( -> id int, -> name varchar(40) -> ) -> ; Query OK, 0 rows affected (3.08 sec)
이번에는 정상적으로 테이블이 생성되었습니다.
1. 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다. 이때에도 테이블 이름을 반드시 백틱으로 감싸야 합니다.
mysql> insert into `groups` values(10,'John'); Query OK, 1 row affected (0.30 sec) mysql> insert into `groups` values(11,'Bob'); Query OK, 1 row affected (0.32 sec) mysql> insert into `groups` values(12,'Mike'); Query OK, 1 row affected (0.40 sec)
2. 데이터 조회하기
SELECT 문을 사용하여 테이블의 레코드를 확인할 수 있습니다.
mysql> select *from `groups`;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------+------+ | id | name | +------+------+ | 10 | John | | 11 | Bob | | 12 | Mike | +------+------+ 3 rows in set (0.04 sec)
정리
MySQL에서 "groups"처럼 예약 키워드에 해당하는 이름으로 테이블을 생성하면 ERROR 1064 구문 오류가 발생합니다. 이 경우 백틱(`)으로 테이블 이름을 감싸주면 예약 키워드라도 정상적으로 사용할 수 있습니다. 다만 가독성과 유지보수를 고려하면, 가능한 한 예약 키워드와 겹치지 않는 테이블 이름을 사용하는 것이 좋습니다.