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

MySQL에서 두 번째 열이 NOT NULL일 때 한 열의 데이터를 다른 열로 업데이트하는 방법

개요

MySQL에서 한 열의 데이터를 다른 열로 복사하거나 업데이트해야 하는 경우가 종종 있습니다. 이때 UPDATE 문과 함께 IS NOT NULL 조건을 사용하면, 특정 열이 NULL이 아닌 경우에만 데이터를 안전하게 업데이트할 수 있습니다.

이 글에서는 두 번째 열(ListOfName)이 NOT NULL인 경우에만 첫 번째 열(UserFirstName)의 값을 해당 값으로 대체하는 방법을 예제와 함께 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable
(
    UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserFirstName varchar(20),
    ListOfName varchar(20)
);
Query OK, 0 rows affected (0.59 sec)

UserId는 자동 증가(AUTO_INCREMENT) 기본 키로 설정되어 있으며, UserFirstName과 ListOfName 두 개의 문자열 열이 포함되어 있습니다.

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 여러 레코드를 삽입합니다. 일부 행에는 의도적으로 NULL 값을 넣어 조건부 업데이트의 동작을 확인할 수 있도록 합니다.

mysql> insert into DemoTable(UserFirstName,ListOfName) values('John','Larry');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values('Carol',null);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values('David','Sam');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values('Bob',null);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values(null,null);
Query OK, 1 row affected (0.18 sec)

3. 현재 데이터 확인하기

SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+--------+---------------+------------+
| UserId | UserFirstName | ListOfName |
+--------+---------------+------------+
| 1      | John          | Larry      |
| 2      | Carol         | NULL       |
| 3      | David         | Sam        |
| 4      | Bob           | NULL       |
| 5      | NULL          | NULL       |
+--------+---------------+------------+
5 rows in set (0.00 sec)

4. 조건부 업데이트 쿼리 실행하기

이제 핵심 부분입니다. ListOfName 열이 NOT NULL인 행에 대해서만 UserFirstName 열의 값을 ListOfName 열의 값으로 업데이트하는 쿼리는 다음과 같습니다.

mysql> update DemoTable set UserFirstName=ListOfName where ListOfName is not null;
Query OK, 2 rows affected (0.26 sec)
Rows matched: 2 Changed: 2 Warnings: 0

WHERE 절에 IS NOT NULL 조건을 추가했기 때문에, ListOfName이 NULL인 행(2번 Carol, 4번 Bob, 5번 행)은 업데이트 대상에서 제외됩니다. 실행 결과 2개의 행만 변경된 것을 확인할 수 있습니다.

5. 업데이트 결과 확인하기

UserFirstName 열이 정상적으로 업데이트되었는지 다시 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+--------+---------------+------------+
| UserId | UserFirstName | ListOfName |
+--------+---------------+------------+
| 1      | Larry         | Larry      |
| 2      | Carol         | NULL       |
| 3      | Sam           | Sam        |
| 4      | Bob           | NULL       |
| 5      | NULL          | NULL       |
+--------+---------------+------------+
5 rows in set (0.00 sec)

정리

결과를 보면 ListOfName 값이 존재하던 1번 행은 'Larry'로, 3번 행은 'Sam'으로 UserFirstName이 변경되었습니다. 반면 ListOfName이 NULL이었던 나머지 행들은 원래 값 그대로 유지되었습니다.

이처럼 UPDATE ... SET ... WHERE 열명 IS NOT NULL 패턴을 활용하면 NULL 값으로 인한 의도치 않은 데이터 덮어쓰기를 방지하면서, 조건에 맞는 행만 선택적으로 업데이트할 수 있습니다. 실무에서도 데이터 정제나 마이그레이션 작업 시 매우 유용하게 사용되는 기법이므로 꼭 기억해 두시기 바랍니다.