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

MySQL에서 필드 값이 NULL 또는 0일 때만 업데이트하는 방법

MySQL에서 기존 데이터가 NULL 또는 0인 경우에만 특정 값으로 업데이트하고, 그 외의 유효한 값은 그대로 유지해야 하는 경우가 종종 있습니다. 이럴 때는 IF() 함수를 활용하면 간단하게 해결할 수 있습니다.

핵심 아이디어

UPDATE 문에서 IF(조건, 참일 때 값, 거짓일 때 값) 형태로 조건을 걸어, 컬럼 값이 NULL이거나 0일 때만 새 값을 대입하고 나머지 경우에는 원래 값을 유지하도록 처리합니다.

1. 테스트용 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1592
    -> (
    -> StudentMarks int
    -> );
Query OK, 0 rows affected (0.76 sec)

2. 샘플 데이터 삽입

NULL과 0이 섞여 있는 다양한 값을 삽입합니다.

mysql> insert into DemoTable1592 values(56);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1592 values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1592 values(98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1592 values(0);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1592 values(75);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1592 values(NULL);
Query OK, 1 row affected (0.11 sec)

3. 현재 데이터 확인

SELECT 문으로 전체 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1592;

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

+--------------+
| StudentMarks |
+--------------+
|           56 |
|         NULL |
|           98 |
|            0 |
|           75 |
|         NULL |
+--------------+
6 rows in set (0.00 sec)

4. 조건부 UPDATE 쿼리 실행

이제 값이 NULL이거나 0인 행에만 33으로 업데이트하는 쿼리입니다.

mysql> update DemoTable1592 set StudentMarks=if(StudentMarks IS NULL or StudentMarks=0,33,StudentMarks);
Query OK, 3 rows affected (0.17 sec)
Rows matched: 6  Changed: 3 Warnings: 0

쿼리 로직을 살펴보면 다음과 같습니다.

  • StudentMarks IS NULL or StudentMarks=0 — 값이 NULL이거나 0인지 검사합니다.
  • 조건이 참이면 33으로 값을 변경합니다.
  • 조건이 거짓이면 자기 자신(StudentMarks)을 대입하여 기존 값을 그대로 유지합니다.

결과 메시지를 보면 전체 6개 행 중 실제로 변경된 행은 3개(NULL 2개, 0 1개)임을 확인할 수 있습니다.

5. 업데이트 결과 확인

다시 한번 테이블을 조회해 결과를 확인합니다.

mysql> select * from DemoTable1592;

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

+--------------+
| StudentMarks |
+--------------+
|           56 |
|           33 |
|           98 |
|           33 |
|           75 |
|           33 |
+--------------+
6 rows in set (0.00 sec)

정리

NULL은 일반적인 비교 연산자(=)로 비교할 수 없기 때문에 반드시 IS NULL을 사용해야 합니다. 위 예제처럼 IF() 함수 안에서 IS NULL=0 조건을 함께 사용하면, 유효한 데이터는 건드리지 않고 빈 값(NULL) 또는 0인 필드만 원하는 값으로 안전하게 업데이트할 수 있습니다.