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

MySQL에서 'index' 열 이름으로 인한 구문 오류 해결 방법

MySQL에서 'index'를 열 이름으로 사용할 때 발생하는 오류

MySQL에서 index는 예약어(reserved word)이기 때문에 일반적인 방식으로는 열 이름으로 사용할 수 없습니다. 예약어를 열 이름으로 그대로 사용하면 아래와 같은 구문 오류가 발생합니다.

오류가 발생하는 경우

mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> index int
-> )ENGINE=MyISAM;
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 'int )ENGINE=MyISAM' at line 4

위 쿼리는 index를 예약어로 인식하여 SQL 구문을 해석하지 못해 1064 오류를 반환합니다.

백틱(Backtick)으로 해결하기

예약어를 열 이름으로 반드시 사용해야 한다면, 열 이름을 백틱(` `)으로 감싸주면 됩니다. 이렇게 하면 MySQL이 해당 단어를 식별자로 처리하므로 오류 없이 테이블이 생성됩니다.

mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `index` int
-> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.28 sec)

데이터 삽입하기

INSERT 명령을 사용해 테이블에 레코드를 추가합니다. 이때도 열 이름은 반드시 백틱으로 감싸야 합니다.

mysql> insert into DemoTable(`index`) values(4);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(`index`) values(8);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(`index`) values(12);
Query OK, 1 row affected (0.06 sec)

저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+-------+
| Id | index |
+----+-------+
| 1 | 4 |
| 2 | 8 |
| 3 | 12 |
+----+-------+
3 rows in set (0.00 sec)

정리

MySQL에서 index, order, group 같은 예약어를 열 이름으로 사용하려면 항상 백틱(` `)으로 감싸야 합니다. 다만 가독성과 유지보수를 고려하면, 가능하다면 idx처럼 예약어가 아닌 이름을 사용하는 것이 좋습니다.