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

MySQL에서 LIMIT와 함께 UPDATE 쿼리 사용하는 방법 (예제로 배우기)

MySQL에서 UPDATE 쿼리에 LIMIT을 사용할 수 있을까?

결론부터 말하면 가능합니다. MySQL에서는 UPDATE 쿼리에 LIMIT을 함께 사용하여 특정 개수의 행만 업데이트할 수 있습니다. 이 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1. 예제용 테이블 생성하기

먼저 CREATE 명령어를 사용해 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> CREATE TABLE tblUpdateLimit
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.53 sec)

2. 데이터 삽입하기

INSERT 명령어를 이용해 총 9개의 레코드를 테이블에 추가합니다.

mysql> INSERT INTO tblUpdateLimit VALUES(1,'John');
Query OK, 1 row affected (0.54 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(2,'Carol');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(3,'Smith');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(4,'Kayle');
Query OK, 1 row affected (0.44 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(5,'David');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(6,'Jason');
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(7,'Larry');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(8,'Serhat');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO tblUpdateLimit VALUES(9,'Winny');
Query OK, 1 row affected (0.18 sec)

3. 테이블 데이터 확인하기

저장된 데이터를 조회하려면 다음 쿼리를 실행합니다.

mysql> SELECT * FROM tblUpdateLimit;

실행 결과는 아래와 같습니다.

+------+--------+
| id   | name   |
+------+--------+
| 1    | John   |
| 2    | Carol  |
| 3    | Smith  |
| 4    | Kayle  |
| 5    | David  |
| 6    | Jason  |
| 7    | Larry  |
| 8    | Serhat |
| 9    | Winny  |
+------+--------+
9 rows in set (0.00 sec)

4. LIMIT과 함께 사용하는 UPDATE 문법

UPDATE 쿼리에 LIMIT을 적용하려면 서브쿼리를 활용하는 방식을 사용합니다. 기본 문법은 다음과 같습니다.

UPDATE yourTableName SET column_name='some value'
WHERE column_name1 IN (
SELECT column_name1 FROM (
SELECT column_name1 FROM yourTableName ORDER BY column_name1 ASC LIMIT integerValue, integerValue
) anyAliasName );

이 문법의 핵심은 내부 서브쿼리에서 먼저 원하는 범위의 행을 선택한 뒤, 외부 WHERE 조건에서 해당 행들을 업데이트 대상으로 지정하는 것입니다.

5. 실제 쿼리 실행하기

이제 위 문법을 실제로 적용해 보겠습니다. id 기준 오름차순으로 정렬했을 때 앞의 7개 행의 name 값을 'Adam'으로 변경하는 쿼리입니다.

mysql> UPDATE tblUpdateLimit SET name = 'Adam'
-> WHERE id IN (
SELECT id FROM ( SELECT id FROM tblUpdateLimit ORDER BY id ASC LIMIT 0,7 ) l);
Query OK, 7 rows affected (0.27 sec)
Rows matched: 7 Changed: 7 Warnings: 0

실행 결과를 보면 7개의 행이 성공적으로 변경되었음을 확인할 수 있습니다.

6. 업데이트 결과 검증하기

테이블이 제대로 업데이트되었는지 다시 조회해 보겠습니다.

mysql> SELECT * FROM tblUpdateLimit;

출력 결과는 다음과 같습니다.

+------+--------+
| id   | name   |
+------+--------+
| 1    | Adam   |
| 2    | Adam   |
| 3    | Adam   |
| 4    | Adam   |
| 5    | Adam   |
| 6    | Adam   |
| 7    | Adam   |
| 8    | Serhat |
| 9    | Winny  |
+------+--------+
9 rows in set (0.00 sec)

id가 1부터 7까지인 행의 name이 모두 'Adam'으로 변경되고, 나머지 두 행은 그대로 유지된 것을 확인할 수 있습니다.

참고: 단일 테이블 업데이트라면 더 간단한 방법도 있습니다

참고로 MySQL은 단일 테이블 UPDATE 구문에서 ORDER BYLIMIT를 직접 지원합니다. 즉, 위 예제처럼 서브쿼리 없이도 아래와 같이 작성할 수 있습니다.

UPDATE tblUpdateLimit SET name = 'Adam' ORDER BY id ASC LIMIT 7;

다만 여러 테이블을 조인하는 UPDATE나 특정 환경(예: 안전 업데이트 모드)에서는 서브쿼리 방식이 필요할 수 있으므로, 상황에 맞게 두 가지 방법을 활용하시면 됩니다.