MySQL에서 가장 많이 사용되는 DML(Data Manipulation Language) 명령어 중 하나가 바로 UPDATE이다.
이 명령어는 기존 데이터의 값을 선택적으로 수정할 수 있는 핵심 기능으로, 데이터베이스 유지보수, 상태 변경, 로직 반영 등에 빠질 수 없는 명령어이다.
✅ MySQL UPDATE 기본 문법
UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;
이 문법은 기본 중의 기본이다.
WHERE 절을 지정하지 않으면 테이블의 모든 행이 수정되므로, 항상 주의해야 한다.
✅ 가장 기본적인 예제
UPDATE users
SET email = 'new_email@example.com'
WHERE id = 1;
이 쿼리는 users 테이블에서 id가 1인 사용자의 이메일을 새로운 값으로 수정한다.
단일 행 업데이트에서 가장 많이 사용되는 패턴이다.
✅ 다중 컬럼 동시 수정
UPDATE products
SET price = price * 1.1,
stock = stock - 10
WHERE product_id = 1001;
UPDATE는 여러 컬럼을 동시에 수정할 수 있다.
이 예제는 가격에 10%를 더하고, 재고를 10개 줄인다.
✅ WHERE 조건을 반드시 지정해야 하는 이유
UPDATE employees
SET salary = 0;
이 쿼리는 모든 직원의 급여를 0으로 만든다.
WHERE 절이 없으면 전체 테이블이 갱신되므로, 실수로 데이터를 손상시킬 위험이 크다. 항상 WHERE 조건을 명확하게 작성해야 한다.
✅ 조건 비교 및 범위 활용
특정 값으로 필터링
UPDATE users
SET status = 'inactive'
WHERE last_login < NOW() - INTERVAL 6 MONTH;
6개월 이상 로그인하지 않은 사용자의 상태를 비활성화 처리하는 예제이다.
BETWEEN, IN 사용 예
UPDATE orders
SET status = '배송완료'
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
UPDATE users
SET grade = 'VIP'
WHERE id IN (101, 102, 103);
WHERE 조건은 SELECT와 동일하게 다양한 방식으로 표현할 수 있어 매우 유연하다.
✅ UPDATE + JOIN 사용법
MySQL에서는 UPDATE 문에서도 JOIN을 사용할 수 있다.
UPDATE users u
JOIN subscriptions s ON u.id = s.user_id
SET u.status = 'premium'
WHERE s.expire_date > NOW();
위 쿼리는 subscriptions 테이블에서 유효한 구독이 있는 사용자만 골라 users 테이블의 상태를 'premium'으로 변경한다.
✅ NULL 처리와 문자열 조합
UPDATE members
SET phone = NULL
WHERE unsubscribed = 1;
UPDATE articles
SET title = CONCAT('[공지] ', title)
WHERE category = 'notice';
NULL로 값을 초기화하거나, 문자열을 연결하여 새로운 값을 만들 수도 있다.
✅ 서브쿼리를 활용한 업데이트
UPDATE users
SET total_orders = (
SELECT COUNT(*)
FROM orders
WHERE orders.user_id = users.id
);
이 예제는 사용자의 총 주문 수를 계산하여 total_orders 컬럼에 업데이트하는 방식이다.
이처럼 서브쿼리를 활용하면 복잡한 집계 결과도 반영할 수 있다.
✅ 주의사항 요약
주의할 점 | 설명 |
WHERE 누락 | 전체 데이터가 수정될 수 있음 |
트랜잭션 사용 고려 | 실수 방지를 위해 START TRANSACTION + COMMIT 활용 |
백업 필수 | 중요 테이블은 업데이트 전 백업 수행 |
실행 전 SELECT로 검증 | UPDATE 전에 SELECT로 결과 예상 |
✅ 트랜잭션을 활용한 안전한 UPDATE
START TRANSACTION;
UPDATE accounts
SET balance = balance - 10000
WHERE user_id = 1;
UPDATE accounts
SET balance = balance + 10000
WHERE user_id = 2;
COMMIT;
이 예제는 은행 이체와 같은 트랜잭션 처리를 위한 구조이다.
여러 UPDATE가 한 번에 적용되어야 할 때는 반드시 트랜잭션으로 묶어야 한다.
✅ 공식 문서 참고 링크
'DB' 카테고리의 다른 글
[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 |
[MySQL] ENUM 성능 최적화와 실무 활용 팁 총정리 (0) | 2025.06.30 |