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

MySQL CASE 문으로 단일 쿼리에서 데이터 일괄 업데이트하는 방법

MySQL에서는 CASE 명령을 활용하면 여러 개의 UPDATE 쿼리를 실행하지 않고도 단 하나의 쿼리로 여러 행의 데이터를 일괄 업데이트할 수 있습니다. 조건별로 서로 다른 값을 지정해야 할 때 특히 유용한 방법입니다.

CASE를 이용한 일괄 업데이트 기본 문법

UPDATE yourTableName
SET yourUpdateColumnName = (
    CASE yourConditionColumnName
        WHEN Value1 THEN 'UpdatedValue1'
        WHEN Value2 THEN 'UpdatedValue2'
        ...
        N
    END
)
WHERE yourConditionColumnName IN(Value1, Value2, ..., N);

이 문법의 핵심은 CASE 표현식이 조건 컬럼의 각 값에 따라 다른 업데이트 값을 반환하고, WHERE ... IN(...) 절이 대상 행만 정확히 선택한다는 점입니다.

예제 테이블 생성하기

개념을 이해하기 위해 먼저 예제용 테이블을 생성해 보겠습니다.

mysql> CREATE TABLE UpdateAllDemo
    -> (
    -> BookId int,
    -> BookName varchar(200)
    -> );
Query OK, 0 rows affected (1.18 sec)

샘플 데이터 삽입하기

INSERT 명령으로 몇 개의 레코드를 추가합니다.

mysql> INSERT INTO UpdateAllDemo VALUES(1000, 'Introduction to C');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO UpdateAllDemo VALUES(1001, 'Introduction to Java');
Query OK, 1 row affected (0.21 sec)

현재 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> SELECT * FROM UpdateAllDemo;

실행 결과는 다음과 같습니다.

+--------+----------------------+
| BookId | BookName             |
+--------+----------------------+
| 1000   | Introduction to C    |
| 1001   | Introduction to Java |
+--------+----------------------+
2 rows in set (0.00 sec)

CASE 문으로 일괄 업데이트 실행하기

이제 두 개의 값을 한 번의 쿼리로 변경해 보겠습니다.

  • 'Introduction to C' → 'C in Depth'
  • 'Introduction to Java' → 'Java in Depth'

앞서 설명한 CASE 명령을 적용한 쿼리는 다음과 같습니다.

mysql> UPDATE UpdateAllDemo
    -> SET BookName = (
    ->     CASE BookId
    ->         WHEN 1000 THEN 'C in Depth'
    ->         WHEN 1001 THEN 'Java in Depth'
    ->     END
    -> )
    -> WHERE BookId IN(1000, 1001);
Query OK, 2 rows affected (0.24 sec)

업데이트 결과 검증하기

SELECT 문으로 데이터가 실제로 변경되었는지 확인합니다.

mysql> SELECT * FROM UpdateAllDemo;

아래 출력 결과를 통해 두 레코드가 성공적으로 일괄 업데이트되었음을 알 수 있습니다.

+--------+---------------+
| BookId | BookName      |
+--------+---------------+
| 1000   | C in Depth    |
| 1001   | Java in Depth |
+--------+---------------+
2 rows in set (0.00 sec)

주의 사항 및 팁

단일 쿼리 일괄 업데이트를 안전하게 사용하려면 다음 사항을 기억하세요.

  • WHERE 절 생략 금지: WHERE 절을 빼먹으면 테이블의 모든 행이 업데이트 대상이 되며, CASE 조건에 해당하지 않는 행은 NULL로 설정될 수 있습니다.
  • ELSE 절 활용: 예상치 못한 값이 들어올 경우를 대비해 ELSE yourConditionColumnName처럼 원래 값을 유지하도록 ELSE 절을 추가하면 더욱 안전합니다.
  • 성능 장점: 개별 UPDATE 문을 여러 번 실행하는 것보다 네트워크 왕복 횟수가 줄어들어 대량 데이터 처리 시 성능상 이점이 있습니다.