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

MySQL에서 'order' 테이블 사용 시 발생하는 쿼리 오류와 해결 방법

MySQL에서 order예약어(reserved word)입니다. 따라서 이 단어를 테이블 이름으로 그대로 사용하면 쿼리 오류가 발생합니다.

해결 방법: 백틱(Backticks) 사용하기

예약어를 테이블 이름이나 컬럼 이름으로 사용하려면 이름을 백틱(`)으로 감싸주어야 합니다. 아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.

1. 백틱으로 테이블 생성하기

mysql> create table `order`
    -> (
    -> StudentId int
    -> );
Query OK, 0 rows affected (1.78 sec)

`order`라는 이름의 테이블이 정상적으로 생성되었습니다.

2. INSERT 명령으로 데이터 삽입하기

mysql> insert into `order` values(101);
Query OK, 1 row affected (0.26 sec)
mysql> insert into `order` values(210);
Query OK, 1 row affected (0.18 sec)
mysql> insert into `order` values(190);
Query OK, 1 row affected (0.28 sec)
mysql> insert into `order` values(180);
Query OK, 1 row affected (0.46 sec)
mysql> insert into `order` values(205);
Query OK, 1 row affected (0.28 sec)

총 5개의 학생 ID(StudentId)를 테이블에 삽입했습니다.

3. SELECT 문으로 전체 레코드 조회하기

mysql> select * from `order`;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-----------+
| StudentId |
+-----------+
|       101 |
|       210 |
|       190 |
|       180 |
|       205 |
+-----------+
5 rows in set (0.00 sec)

4. ORDER BY 절과 함께 사용하기

테이블 이름뿐 아니라 ORDER BY 절까지 포함된 쿼리에서도 백틱을 사용하면 충돌 없이 정상 실행됩니다. 아래는 `order` 테이블에서 StudentId를 내림차순으로 정렬하여 가장 큰 값 하나만 조회하는 쿼리입니다.

mysql> select * from `order` order by StudentId desc limit 1;

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

+-----------+
| StudentId |
+-----------+
|       210 |
+-----------+
1 row in set (0.03 sec)

정리

order처럼 MySQL의 예약어는 테이블 이름으로 직접 사용할 수 없으며, 반드시 백틱(`)으로 감싸야 합니다. 다만 가독성과 유지보수를 고려하면, 애초에 orders처럼 복수형 또는 다른 이름으로 테이블을 설계하는 것이 더 안전하고 권장되는 방법입니다.