MySQL에서는 UPDATE 문과 IF() 함수를 조합하면 조건에 따라 특정 필드의 값을 선택적으로 변경할 수 있습니다. 이 글에서는 실제 예제를 통해 테이블 생성부터 데이터 삽입, 조건부 업데이트까지 전 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1436
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (1.06 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1436(Name) values('Chris');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1436(Name) values('David');
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable1436(Name) values('Bob');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1436(Name) values('David');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1436(Name) values('David');
Query OK, 1 row affected (0.31 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1436;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Name | +----+-------+ | 1 | Chris | | 2 | David | | 3 | Bob | | 4 | David | | 5 | David | +----+-------+ 5 rows in set (0.00 sec)
4. 조건에 따라 필드 업데이트하기
이제 핵심인 조건부 업데이트 쿼리입니다. 아래 쿼리는 Id가 2인 행에서, 기존 값이 'David'일 경우에만 'Carol Taylor'로 변경합니다.
mysql> update DemoTable1436
-> set Name=IF(Name='David','Carol Taylor',Name)
-> where Id=2;
Query OK, 1 row affected (0.31 sec)
Rows matched: 1 Changed: 1 Warnings: 0
쿼리 설명:
IF(조건, 참일 때 값, 거짓일 때 값)– 조건이 참이면 두 번째 인자를, 거짓이면 세 번째 인자를 반환합니다.Name='David'– 이름이 'David'인 경우에만 새 값('Carol Taylor')을 적용하고, 그렇지 않으면 기존 값(Name)을 그대로 유지합니다.WHERE Id=2– 업데이트 대상을 Id가 2인 행으로 한정하여, 다른 'David' 레코드(Id 4, 5)는 영향을 받지 않습니다.
5. 업데이트 결과 확인하기
테이블을 다시 조회해 변경 사항을 확인합니다.
mysql> select * from DemoTable1436;
결과를 보면 Id가 2인 행만 'Carol Taylor'로 변경되고, 나머지 'David' 레코드는 그대로 유지된 것을 알 수 있습니다.
+----+--------------+ | Id | Name | +----+--------------+ | 1 | Chris | | 2 | Carol Taylor | | 3 | Bob | | 4 | David | | 5 | David | +----+--------------+ 5 rows in set (0.00 sec)
마무리
이처럼 MySQL에서는 UPDATE 문 안에 IF() 함수를 사용하면 WHERE 절과 함께 조건에 따라 필드 값을 유연하게 제어할 수 있습니다. 더 복잡한 분기 처리가 필요하다면 CASE WHEN 표현식을 활용하는 것도 좋은 방법입니다.