MySQL에서 데이터를 수정할 때 한 번에 여러 컬럼의 값을 바꿔야 하는 경우가 자주 있다.
예를 들어 회원 등급과 포인트를 동시에 변경하거나, 상품 가격과 재고를 함께 조정하는 상황 등 실무에서 매우 흔한 요구사항이다.
이럴 때 유용하게 사용할 수 있는 것이 바로 UPDATE 문에서 다중 컬럼을 동시에 수정하는 문법이다.
✅ UPDATE 다중 컬럼 기본 문법
UPDATE 테이블명
SET 컬럼1 = 값1,
컬럼2 = 값2,
컬럼3 = 값3
WHERE 조건;
SET 뒤에 여러 컬럼을 쉼표로 구분하여 나열하면, 동시에 여러 필드가 수정된다.
기본 예제
UPDATE users
SET status = 'inactive',
last_login = NOW()
WHERE id = 1001;
이 쿼리는 특정 사용자의 상태를 'inactive'로 변경하고, 마지막 로그인 시간을 현재 시간으로 설정한다.
단일 UPDATE 문이므로 성능도 빠르고, 트랜잭션 처리도 간단하다.
✅ 숫자 연산을 함께 적용
컬럼 수정 시 단순히 고정값만이 아니라, 기존 값을 기준으로 산술 연산도 적용할 수 있다.
UPDATE products
SET price = price * 1.05,
stock = stock - 10
WHERE product_id = 3001;
위 예제는 상품 가격을 5% 인상하고, 재고를 10개 차감한다.
가격 조정 + 수량 관리를 함께 처리할 수 있어 유용하다.
✅ 문자열 연결과 날짜 변경
UPDATE events
SET title = CONCAT('[종료]', title),
end_date = NOW()
WHERE status = 'closed';
이 예제는 종료된 이벤트 제목 앞에 [종료]를 붙이고, 종료일을 현재 시각으로 설정한다.
문자열 함수와 시스템 함수도 다중 컬럼에 자유롭게 사용 가능하다.
✅ CASE 문과 함께 활용한 다중 컬럼 수정
조건에 따라 각 컬럼을 다르게 처리하려면 CASE 문을 활용하면 된다.
UPDATE users
SET level = CASE
WHEN total_purchase >= 100000 THEN 'VIP'
WHEN total_purchase >= 50000 THEN 'GOLD'
ELSE 'SILVER'
END,
grade_updated_at = NOW()
WHERE status = 'active';
이 쿼리는 구매 금액에 따라 등급을 구분하고, 등급 수정 일자를 함께 갱신한다.
다양한 조건별 업데이트 로직을 다중 컬럼으로 처리할 수 있어 강력하다.
✅ 다중 컬럼 UPDATE + JOIN 활용 예제
다른 테이블의 값을 참조해서 여러 필드를 동시에 수정할 수도 있다.
UPDATE orders o
JOIN users u ON o.user_id = u.id
SET o.discount_rate = u.membership_discount,
o.status = '적용완료'
WHERE o.status = '대기중';
이 예제는 사용자 정보에 따라 주문 테이블의 할인율과 상태를 동시에 수정하는 구조이다.
JOIN을 활용한 대량 데이터 처리 시에도 다중 컬럼 업데이트가 매우 유용하다.
✅ 주의사항: UPDATE 다중 컬럼 시 유의할 점
- WHERE 절 누락 시 전체 데이터가 수정될 수 있으므로 반드시 조건을 지정해야 한다.
- 컬럼 간 의존성이 있는 경우(예: 하나가 NULL이면 다른 컬럼도 연산 불가) 업데이트 순서를 고려해야 한다.
- 다중 컬럼 업데이트 시에도 트랜잭션 처리 가능하므로 START TRANSACTION으로 묶어서 처리하면 안전하다.
✅ 트랜잭션을 활용한 다중 컬럼 수정 예시
START TRANSACTION;
UPDATE accounts
SET balance = balance - 50000,
last_updated = NOW()
WHERE user_id = 1;
UPDATE accounts
SET balance = balance + 50000,
last_updated = NOW()
WHERE user_id = 2;
COMMIT;
이 예제는 계좌 이체 시 두 사용자의 금액과 갱신일을 동시에 수정하는 트랜잭션 처리 방식이다.
실무에서 정합성이 중요한 데이터는 항상 트랜잭션으로 감싸야 한다.
✅ 공식 문서 링크
'DB' 카테고리의 다른 글
[MySQL] UPDATE + IF / CASE 문으로 조건부 데이터 수정하는 실전 가이드 (1) | 2025.06.30 |
---|---|
[MySQL] UPDATE + 서브쿼리 완전 정복 – 조건 기반 동적 수정의 핵심 기술 (0) | 2025.06.30 |
[MySQL] UPDATE + JOIN 활용법 완전 정리 – 다중 테이블을 수정하는 강력한 방법 (0) | 2025.06.30 |
[MySQL] UPDATE + WHERE (안전하고 정확한 데이터 수정 가이드) (0) | 2025.06.30 |
[MySQL] UPDATE 기본 문법 완벽 정리 – 데이터 수정 (0) | 2025.06.30 |
[MySQL] SELECT INTO OUTFILE + LOAD DATA INFILE 완벽 가이드 – 쿼리 결과 파일로 저장하고 다시 불러오는 방법 (0) | 2025.06.30 |
[MySQL] SELECT INTO OUTFILE로 결과를 파일로 저장하는 방법 총정리 (0) | 2025.06.30 |
[MySQL] UNION과 UNION ALL 완전정복 – 다중 SELECT 결과 통합의 모든 것 (0) | 2025.06.30 |