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

MySQL 8에서 'rank'를 컬럼 이름으로 사용할 수 있을까? 예약어 오류와 백틱 해결법

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 등과 같은 다른 컬럼 이름을 사용하는 것이 더 안전하고 권장되는 방법입니다.