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

MySQL에서 한 번에 여러 행 업데이트하기 – CASE 문 활용 가이드

MySQL에서 하나의 열(컬럼)에 대해 여러 행을 서로 다른 값으로 한 번에 업데이트하려면 CASE 문을 사용하는 것이 가장 효율적입니다. 이 글에서는 예제 테이블을 만들고, CASE 문을 활용해 조건별로 각기 다른 값을 일괄 업데이트하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 학생 ID와 수학 점수를 저장할 테이블을 생성합니다.

mysql> create table updateMultipleRowsDemo
    -> (
    -> StudentId int,
    -> StudentMathScore int
    -> );
Query OK, 0 rows affected (0.63 sec)

2. 테스트 데이터 삽입

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

mysql> insert into updateMultipleRowsDemo values(10001,67);
Query OK, 1 row affected (0.14 sec)
mysql> insert into updateMultipleRowsDemo values(10002,69);
Query OK, 1 row affected (0.15 sec)
mysql> insert into updateMultipleRowsDemo values(10003,89);
Query OK, 1 row affected (0.14 sec)
mysql> insert into updateMultipleRowsDemo values(10004,99);
Query OK, 1 row affected (0.13 sec)
mysql> insert into updateMultipleRowsDemo values(10005,92);
Query OK, 1 row affected (0.13 sec)

3. 현재 데이터 확인

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

mysql> select * from updateMultipleRowsDemo;

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

+-----------+------------------+
| StudentId | StudentMathScore |
+-----------+------------------+
| 10001     | 67               |
| 10002     | 69               |
| 10003     | 89               |
| 10004     | 99               |
| 10005     | 92               |
+-----------+------------------+
5 rows in set (0.00 sec)

4. CASE 문으로 여러 행 한 번에 업데이트

이제 핵심인 UPDATE 쿼리입니다. CASE 문을 사용하면 학생 ID에 따라 서로 다른 점수를 지정할 수 있습니다. 아래 예제에서는 StudentId가 10001부터 10003 사이인 행만 대상으로, 각각 다른 값으로 업데이트합니다.

mysql> UPDATE updateMultipleRowsDemo
    -> SET StudentMathScore= CASE StudentId
    -> WHEN 10001 THEN 45
    -> WHEN 10002 THEN 52
    -> WHEN 10003 THEN 67
    -> END
    -> WHERE StudentId BETWEEN 10001 AND 10003;
Query OK, 3 rows affected (0.19 sec)
Rows matched: 3 Changed: 3 Warnings: 0

쿼리 설명:

  • SET StudentMathScore = CASE StudentId ... END : StudentId 값에 따라 반환될 새로운 점수를 결정합니다.
  • WHEN 10001 THEN 45 : StudentId가 10001이면 점수를 45로 변경합니다.
  • WHERE StudentId BETWEEN 10001 AND 10003 : 업데이트 범위를 특정 조건으로 제한하여, 의도하지 않은 행까지 변경되는 것을 방지합니다.

5. 업데이트 결과 확인

값이 정상적으로 변경되었는지 다시 조회해 보겠습니다.

mysql> select * from updateMultipleRowsDemo;

결과를 보면 해당 세 개의 행만 새로운 값으로 변경된 것을 확인할 수 있습니다.

+-----------+------------------+
| StudentId | StudentMathScore |
+-----------+------------------+
| 10001     | 45               |
| 10002     | 52               |
| 10003     | 67               |
| 10004     | 99               |
| 10005     | 92               |
+-----------+------------------+
5 rows in set (0.00 sec)

마무리 및 참고 사항

이처럼 MySQL에서는 CASE 문과 WHERE 절을 함께 사용하면 여러 개의 UPDATE 쿼리를 실행하지 않고도 단일 쿼리로 여러 행을 효율적으로 업데이트할 수 있습니다. 이는 네트워크 왕복 횟수를 줄여 성능 면에서도 유리합니다.

다만 주의할 점은, CASE 문에 포함되지 않은 조건의 행이 WHERE 범위 안에 있다면 해당 열이 NULL로 설정될 수 있으므로, 반드시 WHERE 절로 업데이트 대상 범위를 명확히 지정해야 합니다. 또한 ELSE 절을 추가해 기본값을 지정하는 것도 안전한 방법입니다.