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() 등으로 적절한 기본값 설정 필요 |
✅ 공식 문서 참고 링크
'DB' 카테고리의 다른 글
[MySQL] DELETE + WHERE 조건으로 안전하게 데이터 삭제하는 방법 총정리 (0) | 2025.07.02 |
---|---|
[MySQL] DELETE 기본 문법 총정리 – 안전하게 데이터 삭제하는 법 (1) | 2025.07.02 |
[MySQL] UPDATE 실패 원인과 해결법 완전 정복 – 수정이 안될 때 확인할 모든 것 (2) | 2025.07.01 |
[MySQL] UPDATE 트랜잭션 적용하기: 데이터 무결성을 지키는 안전한 수정 전략 (1) | 2025.07.01 |
[MySQL] UPDATE + NOW() 함수로 날짜 자동 수정하는 실전 활용법 (0) | 2025.06.30 |
[MySQL] UPDATE + IF / CASE 문으로 조건부 데이터 수정하는 실전 가이드 (1) | 2025.06.30 |
[MySQL] UPDATE + 서브쿼리 완전 정복 – 조건 기반 동적 수정의 핵심 기술 (0) | 2025.06.30 |
[MySQL] UPDATE + JOIN 활용법 완전 정리 – 다중 테이블을 수정하는 강력한 방법 (0) | 2025.06.30 |