DB

[MySQL] UPDATE 문에서 NULL 처리하는 방법 완전 정리

인생아 2025. 7. 1. 02:01
반응형

MySQL에서 UPDATE 문을 사용할 때 NULL은 자주 마주하게 되는 특수한 값이다.
NULL은 값이 존재하지 않음(미정의 상태)을 의미하며, 단순한 비교 연산으로는 다룰 수 없는 특성을 지닌다.
따라서 UPDATE 시 NULL 값을 적절히 설정하거나 필터링하고, 조건부로 처리하는 기술은 실무에서 매우 중요하다.

✅ NULL 값이란 무엇인가?

MySQL에서 NULL은 값이 없는 상태를 나타낸다.
숫자 0, 빈 문자열 '', 공백 등과는 완전히 다른 개념이다.
즉, NULL = NULL 은 FALSE이고, IS NULL, IS NOT NULL 같은 전용 조건문을 사용해야 한다.

✅ UPDATE로 NULL 값을 지정하는 방법

1. 특정 컬럼을 NULL로 초기화

UPDATE users
SET phone_number = NULL
WHERE unsubscribed = 1;

회원 탈퇴한 사용자들의 전화번호를 비워주는 예제이다.
민감정보 제거, 초기화, 클린업 처리 시 자주 사용된다.

2. IF 함수로 조건부 NULL 설정

UPDATE users
SET recommender_id = IF(recommender_id = 0, NULL, recommender_id);

추천인이 0으로 저장된 경우 NULL로 바꾸는 예제이다.
0을 의미 있는 데이터로 보지 않을 때 사용되는 정제 패턴이다.

반응형

✅ UPDATE 조건에서 NULL 비교하기

1. WHERE 절에서 NULL 필터링

UPDATE users
SET status = '비활성'
WHERE last_login IS NULL;

로그인 이력이 없는 사용자만 비활성 처리한다.
IS NULL은 반드시 사용해야 하며, = NULL은 오류가 발생하거나 항상 FALSE가 된다.

2. IS NOT NULL 조건으로 유효한 값만 갱신

UPDATE users
SET email_verified = 1
WHERE email IS NOT NULL;

이메일이 있는 사용자만 이메일 인증 완료로 업데이트한다.

✅ COALESCE() 함수로 NULL 대체값 설정

UPDATE payments
SET final_amount = COALESCE(discounted_price, original_price)
WHERE final_amount IS NULL;

discounted_price가 NULL일 경우 original_price로 대체하여 저장하는 방식이다.
COALESCE()는 다중 필드 중 첫 번째 NULL이 아닌 값을 반환하는 함수로 매우 유용하다.

✅ CASE WHEN을 활용한 NULL 조건 처리

UPDATE products
SET category = CASE
  WHEN category IS NULL THEN '미분류'
  ELSE category
END;

카테고리가 NULL인 항목만 '미분류'로 대체하는 예제이다.
CASE문은 NULL을 포함한 다양한 분기 조건을 선언적으로 처리할 수 있다.

✅ ISNULL() 함수 활용

UPDATE inventory
SET status = IF(ISNULL(stock), '재고없음', '재고있음');

ISNULL() 함수는 특정 필드가 NULL인지 여부를 검사하여 조건 분기를 가능하게 한다.
IF()와 함께 쓰면 짧은 문장으로 NULL 여부에 따른 값을 지정할 수 있다.

반응형

✅ UPDATE NULL 처리 실전 예제 모음

이메일 없는 사용자 활성화 차단

UPDATE members
SET status = '차단'
WHERE email IS NULL AND created_at < CURDATE() - INTERVAL 6 MONTH;

NULL값 기준 점수 초기화

UPDATE students
SET test_score = 0
WHERE test_score IS NULL;

이전 날짜가 NULL일 경우 현재 날짜로 초기화

UPDATE events
SET start_date = NOW()
WHERE start_date IS NULL;

✅ NULL 처리 시 주의사항

항목 설명
= NULL은 절대 사용 금지 항상 IS NULL 또는 IS NOT NULL 사용해야 함
NULL + 숫자 = NULL 산술 연산 시 결과도 NULL이 됨
인덱스 주의 NULL은 인덱스에서 빠질 수 있으므로 검색 성능에 영향
초기화 처리 문자열 컬럼은 '', 숫자 컬럼은 0, 날짜는 NOW() 등으로 적절한 기본값 설정 필요
 

✅ 공식 문서 참고 링크

반응형