MySQL에서 특정 조건에 따라 테이블의 값을 업데이트하려면 UPDATE 문과 IF() 함수를 함께 사용하면 됩니다. 이 방법을 활용하면 하나의 쿼리만으로 두 개의 값을 서로 맞바꾸거나 조건에 따라 다른 값으로 일괄 변경할 수 있습니다.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Value int
);
Query OK, 0 rows affected (0.47 sec)샘플 데이터 삽입하기
insert 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(30); Query OK, 1 row affected (0.10 sec)
테이블 데이터 확인하기
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------+ | Value | +-------+ | 10 | | 20 | | 10 | | 20 | | 30 | +-------+ 5 rows in set (0.00 sec)
조건에 따라 값 업데이트하기
다음은 IF() 함수를 활용해 조건에 따라 값을 업데이트하는 쿼리입니다. Value가 10이면 20으로, 그렇지 않으면 10으로 변경됩니다.
mysql> update DemoTable set Value=if(Value=10,20,10); Query OK, 5 rows affected (0.20 sec) Rows matched: 5 Changed: 5 Warnings: 0
업데이트 결과 확인하기
테이블 레코드를 다시 한번 조회해 결과를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------+ | Value | +-------+ | 20 | | 10 | | 20 | | 10 | | 10 | +-------+ 5 rows in set (0.00 sec)
실행 결과를 보면 원래 값이 10이었던 행은 20으로, 20이었던 행은 10으로 바뀌었습니다. 주목할 점은 값이 30이었던 마지막 행 역시 ELSE 분기에 해당하여 10으로 변경되었다는 것입니다. 이처럼 IF(조건, 참일 때 값, 거짓일 때 값) 구문을 사용하면 복잡한 CASE 문 없이도 간단한 조건부 업데이트를 손쉽게 처리할 수 있습니다.