MySQL에서는 UPDATE 문에 GROUP BY 절을 직접 사용할 수 없습니다. 하지만 ORDER BY 절과 LIMIT 절을 조합하면 특정 조건에 해당하는 여러 행 중에서 원하는 순서의 행 하나만 선택적으로 업데이트할 수 있습니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 CREATE TABLE 명령어로 테이블을 생성합니다.
mysql> create table DemoTable2018 -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> EmployeeName varchar(20), -> EmployeeSalary int -> ); Query OK, 0 rows affected (0.61 sec)
2단계: 데이터 삽입
INSERT 명령어로 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable2018(EmployeeName,EmployeeSalary) values('Chris',10000);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable2018(EmployeeName,EmployeeSalary) values('David',12560);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable2018(EmployeeName,EmployeeSalary) values('Chris',25400);
Query OK, 1 row affected (0.09 sec)
3단계: 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable2018;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------------+--------------+----------------+ | EmployeeId | EmployeeName | EmployeeSalary | +------------+--------------+----------------+ | 1 | Chris | 10000 | | 2 | David | 12560 | | 3 | Chris | 25400 | +------------+--------------+----------------+ 3 rows in set (0.00 sec)
현재 'Chris'라는 이름의 직원이 두 명(급여 10,000 / 25,400) 있으므로, 단순히 이름만으로 WHERE 조건을 걸면 두 행이 모두 영향을 받게 됩니다.
4단계: UPDATE + ORDER BY LIMIT로 일부 행만 업데이트
이제 ORDER BY와 LIMIT를 사용해 해당 조건을 만족하는 첫 번째 행만 업데이트해 보겠습니다.
mysql> update DemoTable2018 -> set EmployeeSalary=EmployeeSalary+2500 where EmployeeName='Chris' -> order by EmployeeId limit 1; Query OK, 1 row affected (0.13 sec) Rows matched: 1 Changed: 1 Warnings: 0
이 쿼리는 EmployeeId 오름차순으로 정렬한 뒤, 첫 번째 행(EmployeeId = 1)에 대해서만 급여를 2,500 인상합니다.
5단계: 업데이트 결과 확인
테이블을 다시 조회하여 변경 사항을 확인합니다.
mysql> select *from DemoTable2018;
실행 결과는 다음과 같습니다.
+------------+--------------+----------------+ | EmployeeId | EmployeeName | EmployeeSalary | +------------+--------------+----------------+ | 1 | Chris | 12500 | | 2 | David | 12560 | | 3 | Chris | 25400 | +------------+--------------+----------------+ 3 rows in set (0.00 sec)
결과를 보면 EmployeeId가 1인 'Chris'의 급여만 12,500으로 증가했고, 나머지 레코드는 그대로 유지된 것을 확인할 수 있습니다.
핵심 정리
- MySQL의
UPDATE문은GROUP BY를 직접 지원하지 않습니다. ORDER BY와LIMIT를 조합하면 조건에 맞는 여러 행 중 우선순위가 가장 높은 행 하나만 업데이트할 수 있습니다.PRIMARY KEY처럼 고유한 컬럼을ORDER BY기준으로 사용하면 어떤 행이 수정될지 명확하게 예측할 수 있습니다.- 동일한 조건의 중복 데이터 중 일부만 변경해야 할 때 유용한 패턴입니다.