MySQL에서 'order' 예약어로 인한 구문 오류 원인
MySQL에서 'order'는 ORDER BY 절에 사용되는 예약어(reserved word)입니다. 따라서 컬럼 이름을 'order'로 지정한 상태에서 쿼리에 그대로 사용하면 구문 오류(syntax error)가 발생합니다.
이 문제를 해결하는 가장 간단한 방법은 컬럼 이름을 백틱(backtick, `)으로 감싸는 것입니다.
올바른 문법은 다음과 같습니다.
select * from yourTableName ORDER BY `order` DESC;
예제로 확인하기
1. 테이블 생성
먼저 'order'라는 이름의 컬럼을 가진 테이블을 생성합니다. 이때도 컬럼 이름을 백틱으로 감싸야 합니다.
mysql> create table DemoTable
(
`order` int
);
Query OK, 0 rows affected (0.58 sec)2. 데이터 삽입
insert 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(89); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(67); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(56); Query OK, 1 row affected (0.13 sec)
3. 전체 레코드 조회
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+-------+ | order | +-------+ | 89 | | 67 | | 90 | | 56 | +-------+ 4 rows in set (0.00 sec)
구문 오류 해결 쿼리
아래와 같이 컬럼 이름 'order'를 백틱으로 감싸면 ORDER BY 근처의 구문 오류 없이 정상적으로 내림차순 정렬됩니다.
mysql> select *from DemoTable ORDER BY `order` DESC;
출력 결과
+-------+ | order | +-------+ | 90 | | 89 | | 67 | | 56 | +-------+ 4 rows in set (0.00 sec)
추가 팁
백틱은 Windows에서 ` 키(숫자 1 왼쪽), Mac에서는 영문 입력 상태에서 ` 키로 입력할 수 있습니다. 다만, 애초에 테이블이나 컬럼 이름을 지을 때 'order', 'group', 'desc' 같은 MySQL 예약어를 피하는 것이 가장 좋은 습관입니다. 부득이하게 사용해야 한다면 항상 백틱으로 감싸는 것을 잊지 마세요.