MySQL에서 빈 셀만 NULL로 업데이트하기
테이블에 저장된 빈 문자열('') 값만 NULL로 변경하고 싶다면 MySQL의 NULLIF() 함수를 사용하면 됩니다. 이 함수는 두 인자가 서로 같으면 NULL을 반환하고, 다르면 첫 번째 인자를 그대로 반환합니다. 따라서 UPDATE 문을 실행해도 테이블의 모든 셀이 NULL이 되는 것이 아니라, 빈 값인 행만 NULL로 변경됩니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Name varchar(50)
);
Query OK, 0 rows affected (1.73 sec)2. 데이터 삽입
insert 명령으로 레코드를 삽입합니다. 여기서는 의도적으로 빈 문자열도 함께 입력합니다.
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.15 sec)3. 현재 데이터 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | Mike | | | | David | | | | Mike | +-------+ 5 rows in set (0.00 sec)
'Mike'와 'David' 사이에 빈 문자열이 저장된 행이 두 개 있는 것을 확인할 수 있습니다.
4. 빈 셀만 NULL로 업데이트하는 쿼리
다음은 빈 셀만 NULL로 업데이트하는 쿼리입니다.
mysql> update DemoTable set Name=NULLIF(Name,''); Query OK, 2 rows affected (0.19 sec) Rows matched: 5 Changed: 2 Warnings: 0
실행 결과에서 "Changed: 2"로 표시된 것처럼, 전체 5개 행 중 실제로 변경된 것은 빈 문자열이었던 2개 행뿐입니다. 나머지 데이터는 그대로 유지됩니다.
5. 업데이트 후 결과 확인
테이블을 다시 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | Mike | | NULL | | David | | NULL | | Mike | +-------+ 5 rows in set (0.00 sec)
정리
NULLIF(Name, '')은 Name 값이 빈 문자열일 때 NULL을 반환하고, 그 외의 경우에는 원래 값을 그대로 반환합니다. 따라서 UPDATE ... SET 컬럼명 = NULLIF(컬럼명, '') 구문을 활용하면 빈 셀만 안전하게 NULL로 변환할 수 있으며, 정상적인 데이터는 전혀 영향을 받지 않습니다.