MySQL 8에서 'rank'는 예약어입니다
rank는 MySQL 8.0.2 버전부터 정의된 예약어(reserved word)입니다. 따라서 'rank'를 그대로 컬럼(열) 이름으로 사용하면 문법 오류가 발생합니다. 이 경우 컬럼 이름을 백틱(`` ` ``)으로 감싸주면 오류 없이 사용할 수 있습니다.
1. 현재 MySQL 버전 확인하기
먼저 작업 중인 MySQL 버전을 확인해 보겠습니다. 여기서는 MySQL 8.0.12 버전을 사용하고 있습니다.
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec)
2. 'rank'를 그대로 사용했을 때 발생하는 오류
'rank'를 예약어임에도 불구하고 일반 컬럼 이름처럼 사용하면 다음과 같은 문제가 발생합니다.
mysql> create table DemoTable1596
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> rank int
-> );
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 'rank int
)' at line 5위 결과에서 볼 수 있듯이, 예약어를 컬럼 이름으로 사용했기 때문에 1064 SQL 문법 오류가 발생했습니다.
3. 백틱(`)으로 감싸서 테이블 생성하기
오류를 피하려면 'rank'를 백틱으로 감싸 테이블을 생성하면 됩니다.
mysql> create table DemoTable1596
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> `rank` int
-> );
Query OK, 0 rows affected (0.51 sec)4. 데이터 삽입하기
INSERT 명령문을 사용해 테이블에 레코드를 추가해 보겠습니다. 이때도 'rank' 컬럼은 반드시 백틱으로 감싸야 합니다.
mysql> insert into DemoTable1596(StudentName,`rank`) values('Bob',4567);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1596(StudentName,`rank`) values('David',1);
Query OK, 1 row affected (0.17 sec)5. 저장된 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1596;
실행 결과는 다음과 같습니다.
+----+-------------+------+ | Id | StudentName | rank | +----+-------------+------+ | 1 | Bob | 4567 | | 2 | David | 1 | +----+-------------+------+ 2 rows in set (0.00 sec)
정리
MySQL 8.0.2 이상에서 rank는 윈도우 함수 관련 예약어이므로 컬럼 이름으로 직접 사용할 수 없습니다. 백틱(`)으로 감싸면 사용할 수 있지만, 쿼리 작성 시마다 매번 백틱을 입력해야 하는 번거로움이 있습니다. 따라서 실무에서는 student_rank, ranking 등과 같은 다른 컬럼 이름을 사용하는 것이 더 안전하고 권장되는 방법입니다.