MySQL에서 조건에 따라 레코드 값 변경하기
MySQL에서 특정 조건에 맞는 레코드의 값을 일괄적으로 변경하려면 CASE 문을 활용하면 됩니다. UPDATE 문과 함께 CASE 문을 사용하면 각 행의 현재 값에 따라 서로 다른 값으로 유연하게 수정할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1481
-> (
-> PlayerScore int
-> );
Query OK, 0 rows affected (0.42 sec)
2. 데이터 삽입
INSERT 문을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1481 values(454);
Query OK, 1 row affected (0.41 sec)
mysql> insert into DemoTable1481 values(765);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1481 values(890);
Query OK, 1 row affected (0.09 sec)
3. 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1481;
실행 결과는 다음과 같습니다.
+-------------+
| PlayerScore |
+-------------+
| 454 |
| 765 |
| 890 |
+-------------+
3 rows in set (0.00 sec)
4. CASE 문으로 조건부 업데이트 실행
다음은 조건에 따라 레코드 값을 변경하는 핵심 쿼리입니다. PlayerScore가 454이면 1256으로, 765이면 1865로, 890이면 3990으로 각각 변경됩니다.
mysql> update DemoTable1481
-> set PlayerScore= case when PlayerScore=454 then 1256
-> when PlayerScore=765 then 1865
-> when PlayerScore=890 then 3990
-> end
-> ;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3 Changed: 3 Warnings: 0
5. 변경 결과 확인
업데이트 후 테이블의 레코드를 다시 한번 확인해 보겠습니다.
mysql> select * from DemoTable1481;
모든 점수가 조건에 맞게 정상적으로 변경된 것을 확인할 수 있습니다.
+-------------+
| PlayerScore |
+-------------+
| 1256 |
| 1865 |
| 3990 |
+-------------+
3 rows in set (0.00 sec)
마무리 및 참고 사항
이처럼 MySQL의 UPDATE 문 안에서 CASE 문을 사용하면, 조건마다 개별적인 UPDATE 쿼리를 여러 번 실행하지 않고도 단 하나의 쿼리로 조건별 값을 손쉽게 변경할 수 있습니다. 다만 조건에 해당하지 않는 레코드는 기본적으로 NULL로 설정되므로, WHERE 절로 대상 범위를 제한하거나 ELSE 절을 추가해 기본값을 지정해 주는 것이 안전합니다.