MySQL에서 빈 문자열을 NULL로 업데이트하는 방법
테이블에 저장된 빈 문자열('')을 NULL로 변경하고 싶다면 IF() 함수와 UPDATE 명령을 함께 사용하면 됩니다. IF() 함수는 조건이 참일 때 두 번째 인자를, 거짓일 때 세 번째 인자를 반환하는 조건 함수로, 이를 활용하면 빈 값인 경우에만 NULL을 넣도록 간단히 처리할 수 있습니다.
아래에서 전체 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1601
-> (
-> FirstName varchar(20),
-> LastName varchar(20)
-> );
Query OK, 0 rows affected (0.53 sec)
2. 데이터 삽입
insert 명령으로 몇 개의 레코드를 삽입합니다. 이때 일부 레코드에는 의도적으로 빈 문자열('')을 넣어 두었습니다.
mysql> insert into DemoTable1601 values('John','Doe');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1601 values('Adam','');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1601 values('David','Miller');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1601 values('Chris','');
Query OK, 1 row affected (0.11 sec)3. 현재 데이터 확인
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1601;
실행 결과는 다음과 같습니다.
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John | Doe |
| Adam | |
| David | Miller |
| Chris | |
+-----------+----------+
4 rows in set (0.00 sec)
Adam과 Chris의 LastName이 빈 문자열로 저장되어 있는 것을 확인할 수 있습니다.
4. 빈 값을 NULL로 업데이트하는 쿼리
다음은 열의 값을 NULL 또는 기존 값으로 업데이트하는 핵심 쿼리입니다.
mysql> update DemoTable1601 set LastName=if(LastName='',NULL,LastName);
Query OK, 2 rows affected (0.22 sec)
Rows matched: 4 Changed: 2 Warnings: 0
이 쿼리는 LastName이 빈 문자열('')이면 NULL로 바꾸고, 그렇지 않으면 원래 값을 그대로 유지합니다. 실행 결과 4개 행 중 2개 행이 변경된 것을 확인할 수 있습니다.
5. 결과 확인
테이블의 레코드를 다시 한번 조회해 보겠습니다.
mysql> select * from DemoTable1601;
실행 결과는 다음과 같습니다.
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John | Doe |
| Adam | NULL |
| David | Miller |
| Chris | NULL |
+-----------+----------+
4 rows in set (0.00 sec)
Adam과 Chris의 LastName이 정상적으로 NULL로 변경된 것을 확인할 수 있습니다.
정리 및 추가 팁
IF(조건, 참일 때 값, 거짓일 때 값) 구문을 활용하면 별도의 프로시저나 복잡한 로직 없이 하나의 UPDATE 쿼리만으로 빈 문자열을 NULL로 손쉽게 변환할 수 있습니다.
참고로 MySQL에서 제공하는 NULLIF() 함수를 사용하면 더욱 간결하게 처리할 수도 있습니다. 다음과 같이 작성하면 동일한 결과를 얻을 수 있습니다.
update DemoTable1601 set LastName = nullif(LastName, '');
NULLIF(expr1, expr2)는 두 표현식이 같으면 NULL을 반환하고, 다르면 첫 번째 표현식을 반환하기 때문에 빈 문자열을 NULL로 치환하는 작업에 특히 유용합니다.