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

MySQL에서 CASE WHEN/THEN/ELSE 구문으로 대량 업데이트 수행하기

MySQL에서 여러 행의 데이터를 한 번의 쿼리로 조건에 따라 다르게 수정해야 할 때, CASE WHEN/THEN/ELSE 구문을 활용하면 효율적으로 대량 업데이트를 수행할 수 있습니다. 이 방식은 개별 UPDATE 문을 여러 번 실행하는 것보다 성능 면에서 유리합니다.

CASE WHEN/THEN/ELSE를 사용한 대량 업데이트 기본 문법

UPDATE yourTableName SET yourColumnName = CASE
    WHEN yourColumnName = Value1 THEN anyUpdatedValue1
    WHEN yourColumnName = Value2 THEN anyUpdatedValue2
    WHEN yourColumnName = Value3 THEN anyUpdatedValue3
    WHEN yourColumnName = Value4 THEN anyUpdatedValue4
    ELSE yourColumnName
END;

위 문법에서 ELSE 절은 조건에 해당하지 않는 나머지 행의 값을 그대로 유지하는 역할을 합니다. 만약 ELSE 절을 생략하면 조건에 맞지 않는 행의 값이 NULL로 변경될 수 있으므로 주의해야 합니다.

예제 테이블 생성

문법을 실제로 이해하기 위해 먼저 예제 테이블을 생성해 보겠습니다.

mysql> CREATE TABLE CaseUpdateDemo (
    -> Id int,
    -> Name varchar(100)
    -> );
Query OK, 0 rows affected (0.78 sec)

샘플 데이터 삽입

INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다.

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

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

mysql> INSERT INTO CaseUpdateDemo VALUES(3, 'Mike');
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO CaseUpdateDemo VALUES(4, 'Bob');
Query OK, 1 row affected (0.15 sec)

삽입된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM CaseUpdateDemo;

실행 결과

+------+-------+
| Id   | Name  |
+------+-------+
| 1    | John  |
| 2    | Carol |
| 3    | Mike  |
| 4    | Bob   |
+------+-------+
4 rows in set (0.00 sec)

CASE WHEN/THEN/ELSE로 대량 업데이트 실행

이제 앞서 설명한 문법을 적용하여 Id 컬럼의 값을 한 번의 쿼리로 일괄 변경해 보겠습니다.

mysql> UPDATE CaseUpdateDemo SET Id = CASE
    -> WHEN Id = 1 THEN 1001
    -> WHEN Id = 2 THEN 1002
    -> WHEN Id = 3 THEN 1003
    -> WHEN Id = 4 THEN 1004
    -> ELSE Id
    -> END;
Query OK, 4 rows affected (0.15 sec)
Rows matched: 4 Changed: 4 Warnings: 0

쿼리 실행 결과, 총 4개의 행이 매칭되었고 4개의 행이 모두 변경되었습니다.

업데이트 결과 확인

SELECT 문으로 Id 컬럼이 정상적으로 업데이트되었는지 확인합니다.

mysql> SELECT * FROM CaseUpdateDemo;

실행 결과

+------+-------+
| Id   | Name  |
+------+-------+
| 1001 | John  |
| 1002 | Carol |
| 1003 | Mike  |
| 1004 | Bob   |
+------+-------+
4 rows in set (0.00 sec)

정리

CASE WHEN/THEN/ELSE 구문을 활용하면 조건별로 서로 다른 값을 지정하여 단일 UPDATE 문으로 여러 행을 동시에 수정할 수 있습니다. 이는 데이터베이스와의 통신 횟수를 줄여주고 트랜잭션 처리도 간편하게 만들어 주기 때문에, 대량의 조건부 업데이트 작업 시 매우 유용한 기법입니다.