MySQL 'OPTION SQL_SELECT_LIMIT' 오류의 원인과 해결 방법
MySQL에서 SET OPTION SQL_SELECT_LIMIT=10과 같은 쿼리를 실행하면 "올바른 구문이 아니다"라는 의미의 구문 오류가 발생할 수 있습니다. 그 이유는 SET OPTION 구문이 이미 폐기(deprecated)되었기 때문입니다. 대신 SET SQL_SELECT_LIMIT 구문을 사용해야 합니다.
기본 문법
올바른 문법은 다음과 같습니다.
SET SQL_SELECT_LIMIT=정수값;
이 설정은 현재 세션에서 SELECT 쿼리가 반환하는 최대 행 수를 제한합니다. LIMIT 절을 매번 작성하지 않고도 조회 결과 개수를 손쉽게 조절할 수 있다는 장점이 있습니다.
예제 테이블 생성
문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table MySQLSelectDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.99 sec)다음으로 INSERT 명령어를 사용해 여러 레코드를 삽입합니다.
mysql> INSERT INTO MySQLSelectDemo VALUES(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(); Query OK, 37 rows affected (0.20 sec) Records: 37 Duplicates: 0 Warnings: 0
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT *FROM MySQLSelectDemo;
실행 결과는 다음과 같습니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | | 30 | | 31 | | 32 | | 33 | | 34 | | 35 | | 36 | | 37 | +----+ 37 rows in set (0.00 sec)
전체 37개의 레코드가 조회된 것을 확인할 수 있습니다. 이제 SQL_SELECT_LIMIT를 설정해 보겠습니다.
사례 1: SQL_SELECT_LIMIT를 3으로 설정
mysql> SET SQL_SELECT_LIMIT=3; Query OK, 0 rows affected (0.00 sec)
설정 후 테이블의 레코드를 다시 조회하면 3개의 레코드만 반환됩니다.
mysql> SELECT *FROM MySQLSelectDemo;
실행 결과는 다음과 같습니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | +----+ 3 rows in set (0.00 sec)
사례 2: SQL_SELECT_LIMIT를 10으로 설정
mysql> SET SQL_SELECT_LIMIT=10; Query OK, 0 rows affected (0.00 sec)
이번에는 위 쿼리 실행 후 10개의 레코드만 조회됩니다.
mysql> SELECT *FROM MySQLSelectDemo;
실행 결과는 다음과 같습니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----+ 10 rows in set (0.00 sec)
참고: 기본값으로 되돌리기
행 수 제한을 해제하고 싶다면 아래와 같이 DEFAULT 키워드를 사용하면 됩니다.
mysql> SET SQL_SELECT_LIMIT=DEFAULT; Query OK, 0 rows affected (0.00 sec)
이렇게 하면 세션의 조회 행 수 제한이 서버 기본값으로 복원됩니다. 정리하면, 구버전 방식인 SET OPTION SQL_SELECT_LIMIT 대신 SET SQL_SELECT_LIMIT를 사용하면 해당 구문 오류를 간단히 해결할 수 있습니다.