MySQL에서 'create table table'은 작동할까?
먼저 테이블을 생성할 때 create table table처럼 'table'이라는 단어를 그대로 테이블 이름으로 사용하면 어떤 일이 발생하는지 살펴보겠습니다.
mysql> create table table(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100)
);
위 쿼리를 실행하면 다음과 같은 오류가 발생합니다.
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 'table(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100)
)' at line 1
오류가 발생하는 이유
위 결과에서 확인할 수 있듯이, 'table'은 MySQL의 예약어(reserved keyword)이기 때문에 테이블 이름으로 직접 사용할 수 없습니다. SELECT, INSERT 같은 SQL 문법에서 이미 특별한 의미로 사용되는 단어들이기 때문입니다.
해결 방법: 백틱(`)으로 감싸기
이 문제를 해결하려면 테이블 이름을 백틱(backtick, `)으로 감싸주면 됩니다. 백틱으로 감싸면 예약어라도 식별자(identifier)로 사용할 수 있습니다.
이제 백틱을 사용해 테이블 이름을 `table`로 지정하여 다시 테이블을 생성해 보겠습니다.
mysql> create table `table`(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100)
);
Query OK, 0 rows affected (0.81 sec)
테이블이 성공적으로 생성되었습니다. 이제 INSERT 명령을 사용해 몇 개의 레코드를 삽입해 보겠습니다.
mysql> insert into `table`(FirstName) values('Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into `table`(FirstName) values('Robert');
Query OK, 1 row affected (0.15 sec)
mysql> insert into `table`(FirstName) values('David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into `table`(FirstName) values('Mike');
Query OK, 1 row affected (0.13 sec)SELECT 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from `table`;
실행 결과는 다음과 같습니다.
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | Chris |
| 2 | Robert |
| 3 | David |
| 4 | Mike |
+----+-----------+
4 rows in set (0.00 sec)
정리
MySQL에서 예약어를 테이블 이름이나 컬럼 이름으로 사용해야 하는 경우, 해당 이름을 백틱(`)으로 감싸면 됩니다. 다만 가독성과 유지보수를 고려하면, 가능한 한 예약어와 겹치지 않는 이름을 사용하는 것이 좋습니다.