MySQL에서 'name'은 예약어가 아닙니다
결론부터 말하면, name은 MySQL의 예약어(reserved word)가 아닙니다. 따라서 백틱(`) 기호 없이도 테이블 이름이나 컬럼 이름으로 자유롭게 사용할 수 있습니다.
다만, SELECT나 INSERT처럼 MySQL에서 이미 문법적으로 사용 중인 예약어를 테이블 이름이나 컬럼 이름으로 쓰고 싶다면 반드시 백틱(`)으로 감싸 주어야 합니다.
1. 'name'을 그대로 사용하는 예제
먼저 백틱 없이 name이라는 이름의 테이블을 생성해 보겠습니다.
mysql> create table name
(
name varchar(10)
);
Query OK, 0 rows affected (0.78 sec)테이블 생성이 정상적으로 완료되었습니다. 이어서 INSERT 명령문으로 레코드를 추가해 보겠습니다.
mysql> insert into name values('John');
Query OK, 1 row affected (0.13 sec)
mysql> insert into name values('Carol');
Query OK, 1 row affected (0.14 sec)SELECT 문으로 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from name;
출력 결과
+-------+ | name | +-------+ | John | | Carol | +-------+ 2 rows in set (0.00 sec)
위 결과에서 확인할 수 있듯이, name은 예약어가 아니기 때문에 어떠한 오류도 발생하지 않고 정상적으로 동작합니다.
2. 예약어를 사용할 때는 반드시 백틱 필요
반면, 예약어를 테이블 이름으로 사용하려면 상황이 다릅니다. 이번에는 예약어인 select를 테이블 이름으로 지정하여 테이블을 생성해 보겠습니다.
mysql> create table `select` ( `select` int ); Query OK, 0 rows affected (0.70 sec)
위 코드에서 테이블 이름과 컬럼 이름 모두 백틱(`)으로 감싼 것을 볼 수 있습니다. select는 MySQL의 예약어이기 때문에 백틱 없이 사용하면 문법 오류(syntax error)가 발생합니다.
이번에도 INSERT 명령문으로 레코드를 추가해 보겠습니다.
mysql> insert into `select` values(1); Query OK, 1 row affected (0.16 sec)
SELECT 문으로 데이터를 조회할 때도 마찬가지로 백틱을 사용해야 합니다.
mysql> select `select` from `select`;
출력 결과
+--------+ | select | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
정리
name은 MySQL의 예약어가 아니므로 백틱 없이 자유롭게 사용할 수 있습니다.select,insert,order,group등과 같은 예약어를 식별자(테이블명·컬럼명)로 사용하려면 반드시 백틱(`)으로 감싸야 합니다.- 예약어를 식별자로 사용하면 SQL 작성 시 혼란을 줄 수 있으므로, 가능하면 예약어와 겹치지 않는 이름을 사용하는 것이 좋습니다.