MySQL에서 INSERT 작업 시 전달되는 값이 NULL인 경우, NOT NULL 제약 조건이 설정된 열에 자동으로 기본값(DEFAULT)을 삽입하고 싶을 때가 있습니다. 이럴 때는 IF() 함수와 IS NULL 연산자를 조합하거나, IFNULL() 함수를 활용하면 간단하게 해결할 수 있습니다.
기본 문법
기본적인 문법 구조는 다음과 같습니다.
INSERT INTO yourTableName(yourColumnName1, yourColumnName2)
VALUES('yourValue', IF(yourColumnName1 IS NULL, DEFAULT(yourColumnName2), 'yourMessage'));
여기서 IF() 함수는 첫 번째 인자의 조건이 참이면 두 번째 인자를, 거짓이면 세 번째 인자를 반환합니다. 즉, yourColumnName1의 값이 NULL이면 해당 열에 정의된 기본값(DEFAULT())을 사용하고, 그렇지 않으면 지정한 값을 삽입합니다.
예제 테이블 생성
실제 동작을 이해하기 위해 테이블을 하나 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table Post
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(10),
-> UserPostMessage varchar(50) NOT NULL DEFAULT 'Hi Good Morning !!!'
-> );
Query OK, 0 rows affected (0.67 sec)
위 테이블에서 UserPostMessage 열에는 NOT NULL 제약 조건과 함께 기본값 'Hi Good Morning !!!'이 설정되어 있습니다.
NULL 값 처리 후 데이터 삽입
이제 값이 NULL일 때 기본값이 삽입되도록 데이터를 입력해 보겠습니다.
mysql> insert into Post(UserName,UserPostMessage)
-> values('John',if(UserName IS NULL,DEFAULT(UserPostMessage),'Hello'));
Query OK, 1 row affected (0.21 sec)
mysql> insert into Post(UserName,UserPostMessage)
-> values(NULL,if(UserName IS NULL,DEFAULT(UserPostMessage),'Hello'));
Query OK, 1 row affected (0.22 sec)
mysql> insert into Post(UserName,UserPostMessage)
-> values('Carol',if(UserName IS NULL,DEFAULT(UserPostMessage),'Hello'));
Query OK, 1 row affected (0.14 sec)
첫 번째와 세 번째 INSERT 문에서는 UserName에 실제 이름('John', 'Carol')이 전달되었으므로 IF() 함수가 'Hello'를 반환합니다. 반면 두 번째 INSERT 문에서는 UserName이 NULL이므로 DEFAULT(UserPostMessage), 즉 'Hi Good Morning !!!'이 삽입됩니다.
결과 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from Post;
실행 결과는 다음과 같습니다.
+----+----------+---------------------+
| Id | UserName | UserPostMessage |
+----+----------+---------------------+
| 1 | John | Hello |
| 2 | NULL | Hi Good Morning !!! |
| 3 | Carol | Hello |
+----+----------+---------------------+
3 rows in set (0.00 sec)
결과에서 확인할 수 있듯이, UserName이 NULL인 두 번째 레코드에는 UserPostMessage 열에 정의된 기본값 'Hi Good Morning !!!'이 자동으로 삽입된 것을 볼 수 있습니다.
참고: IFNULL() 함수 활용
IFNULL(expr1, expr2) 함수도 유사한 목적으로 사용할 수 있습니다. 이 함수는 expr1이 NULL이 아니면 expr1을 반환하고, NULL이면 expr2를 반환합니다. 다만 위 예제처럼 특정 열의 값을 조건으로 판단해야 하는 상황에서는 IF() 함수와 IS NULL 조합이 더 명확하게 의도를 표현할 수 있으므로 실무에서 더 널리 사용됩니다.