DB

[MySQL] UPDATE 기본 문법 완벽 정리 – 데이터 수정

인생아 2025. 6. 30. 18:44
반응형

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가 한 번에 적용되어야 할 때는 반드시 트랜잭션으로 묶어야 한다.

✅ 공식 문서 참고 링크

 

반응형