Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 컬럼 값이 NULL인지 기본값(DEFAULT)인지 확인하는 방법

MySQL에서 특정 컬럼의 값이 실제로 입력된 값인지, 아니면 NULL 또는 기본값(DEFAULT)인지 확인해야 하는 경우가 있습니다. 이럴 때 IFNULL() 함수와 DEFAULT() 함수를 함께 활용하면 손쉽게 판별할 수 있습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성해 보겠습니다. Name 컬럼에는 'Larry'라는 기본값을 설정하고, Age 컬럼은 NULL을 허용하도록 구성했습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(100) DEFAULT 'Larry',
    Age int DEFAULT NULL
);
Query OK, 0 rows affected (0.73 sec)

2. 데이터 삽입하기

INSERT 명령어를 사용하여 다양한 형태로 레코드를 삽입합니다. 일부 레코드는 특정 컬럼 값을 생략하여 기본값이나 NULL이 저장되도록 했습니다.

mysql> insert into DemoTable(Name,Age) values('John',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Age) values(24);
Query OK, 1 row affected (0.13 sec)

3. 전체 데이터 조회하기

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | John  | 23   |
| 2  | Larry | NULL |
| 3  | David | NULL |
| 4  | Larry | 24   |
+----+-------+------+
4 rows in set (0.00 sec)

결과를 보면 Id가 2인 행은 Name 컬럼에 기본값인 'Larry'가 자동으로 저장되었고, Age 컬럼에는 NULL이 들어간 것을 확인할 수 있습니다.

4. NULL 여부 및 기본값 확인 쿼리

이제 핵심인 쿼리입니다. IFNULL()로 NULL 값을 처리하고, DEFAULT() 함수로 해당 컬럼의 기본값을 가져와 비교함으로써 값이 NULL인지 기본값인지를 판별할 수 있습니다.

mysql> select *from DemoTable WHERE IFNULL(Name, DEFAULT(Name)) <> DEFAULT(Name);

실행 결과는 다음과 같습니다.

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | John  | 23   |
| 3  | David | NULL |
+----+-------+------+
2 rows in set (0.00 sec)

결과를 분석해 보면 다음과 같습니다.

  • Id 1 (John): 기본값이 아닌 실제 입력된 값이므로 조회됩니다.
  • Id 2 (Larry): 값이 기본값 'Larry'와 동일하므로 제외됩니다.
  • Id 3 (David): 기본값이 아닌 실제 입력된 값이므로 조회됩니다.
  • Id 4 (Larry): 값이 기본값 'Larry'와 동일하므로 제외됩니다.

이처럼 IFNULL(컬럼명, DEFAULT(컬럼명))DEFAULT(컬럼명)을 비교하면, 해당 컬럼의 값이 사용자가 직접 입력한 값인지 아니면 기본값 또는 NULL인지를 간단하게 구분할 수 있습니다.