CREATE TABLE 문에서 'When'을 열 이름으로 사용할 수 있을까?
MySQL에서 WHEN은 예약어(reserved word)로 지정되어 있기 때문에, 별도의 처리 없이 열 이름으로 사용하면 오류가 발생합니다. 먼저 예약어를 그대로 사용했을 때 어떤 일이 일어나는지 확인해 보겠습니다.
1. 예약어를 그대로 사용한 경우
아래와 같이 CREATE TABLE 문에서 'when'을 열 이름으로 지정해 보겠습니다.
mysql> create table DemoTable693(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(100),
When datetime
);
이 쿼리를 실행하면 다음과 같은 구문 오류가 발생합니다.
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 'When datetime at line 5
MySQL은 'When'을 예약어로 인식하기 때문에 열 이름으로 해석하지 못하고 문법 오류(ERROR 1064)를 반환합니다.
2. 백틱(`)으로 감싸서 해결하기
예약어를 열 이름으로 사용하려면 백틱(backtick, `)으로 감싸주어야 합니다. 아래는 백틱을 적용하여 테이블을 생성하는 예제입니다.
mysql> create table DemoTable693 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(100),
`When` datetime
);
Query OK, 0 rows affected (0.63 sec)
테이블이 정상적으로 생성된 것을 확인할 수 있습니다.
3. 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가해 보겠습니다. 이때도 'When' 열은 반드시 백틱으로 감싸야 합니다.
mysql> insert into DemoTable693(StudentName,`When`) values('Chris',NOW());
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable693(StudentName,`When`) values('Robert',CURDATE());
Query OK, 1 row affected (0.22 sec)NOW() 함수는 현재 날짜와 시간을, CURDATE() 함수는 현재 날짜만 반환합니다.
4. 결과 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable693;
실행 결과는 다음과 같습니다.
+-----------+-------------+---------------------+
| StudentId | StudentName | When |
+-----------+-------------+---------------------+
| 1 | Chris | 2019-07-21 18:57:19 |
| 2 | Robert | 2019-07-21 00:00:00 |
+-----------+-------------+---------------------+
2 rows in set (0.00 sec)
정리
'When'과 같은 MySQL 예약어를 열 이름으로 사용하는 것은 가능하지만, 반드시 백틱(`)으로 감싸야 합니다. 다만 예약어를 열 이름으로 사용하면 매번 백틱을 입력해야 하는 번거로움이 있고 실수로 인한 오류 가능성도 높아지므로, 가급적 'event_time', 'occurred_at'처럼 예약어가 아닌 이름을 사용하는 것이 좋은 습관입니다.