Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 예약어를 테이블 이름으로 사용할 수 있을까? 'create table table'의 동작 원리

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에서 예약어를 테이블 이름이나 컬럼 이름으로 사용해야 하는 경우, 해당 이름을 백틱(`)으로 감싸면 됩니다. 다만 가독성과 유지보수를 고려하면, 가능한 한 예약어와 겹치지 않는 이름을 사용하는 것이 좋습니다.