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

MySQL UPDATE 문으로 기존 열 값에 데이터 추가하는 방법 (CONCAT + IFNULL)

MySQL에서 기존 레코드를 덮어쓰지 않고 특정 열의 값 끝에 새로운 내용을 이어 붙이고 싶다면 UPDATE 문과 CONCAT(), IFNULL() 함수를 함께 사용하면 됩니다.

기본 문법

열에 데이터를 추가할 때 사용하는 기본 문법은 다음과 같습니다.

UPDATE yourTableName SET
yourColumnName = concat(ifnull(yourColumnName,''), 'anyValue1,anyValue2,anyValue');

여기서 IFNULL() 함수가 중요한 역할을 합니다. 해당 열의 값이 NULL인 경우 빈 문자열('')로 대체해 주는데, 만약 이 처리를 생략하면 NULL에 대한 CONCAT 연산 결과도 NULL이 되어 해당 행은 업데이트되지 않는 문제가 발생합니다.

문법을 제대로 이해하기 위해 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

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

mysql> create table AppendDataDemo
-> (
-> StudentId int,
-> StudentName varchar(100),
-> StudentAge int
-> );
Query OK, 0 rows affected (1.54 sec)

2단계: 샘플 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다. 일부러 두 번째 학생의 이름은 NULL로 입력했습니다.

mysql> insert into AppendDataDemo values(101,'John',23);
Query OK, 1 row affected (0.24 sec)

mysql> insert into AppendDataDemo values(102,null,24);
Query OK, 1 row affected (0.74 sec)

mysql> insert into AppendDataDemo values(103,'Mike',26);
Query OK, 1 row affected (0.12 sec)

3단계: 현재 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from AppendDataDemo;

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

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 101       | John        | 23         |
| 102       | NULL        | 24         |
| 103       | Mike        | 26         |
+-----------+-------------+------------+
3 rows in set (0.00 sec)

4단계: UPDATE 문으로 데이터 추가

이제 StudentName 열을 업데이트하여 각 이름 뒤에 "Carol, Sam, Maria"를 이어 붙여 보겠습니다.

mysql> update AppendDataDemo set StudentName=concat(ifnull(StudentName,""), ' Carol,Sam,Maria');
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3 Changed: 3 Warnings: 0

실행 결과를 보면 3개 행이 모두 정상적으로 변경된 것을 확인할 수 있습니다.

5단계: 결과 검증

SELECT 문으로 다시 테이블을 조회하여 데이터가 올바르게 추가되었는지 확인합니다.

mysql> select *from AppendDataDemo;

데이터가 추가된 최종 결과는 다음과 같습니다.

+-----------+----------------------+------------+
| StudentId | StudentName          | StudentAge |
+-----------+----------------------+------------+
| 101       | John Carol,Sam,Maria | 23         |
| 102       | Carol,Sam,Maria      | 24         |
| 103       | Mike Carol,Sam,Maria | 26         |
+-----------+----------------------+------------+
3 rows in set (0.03 sec)

정리

결과를 보면 기존 값이 있던 행(John, Mike)에는 새 값이 뒤에 붙었고, 원래 NULL이었던 행(102번)에는 IFNULL() 덕분에 빈 문자열로 처리되어 "Carol,Sam,Maria"만 저장된 것을 확인할 수 있습니다. 만약 IFNULL() 없이 실행했다면 102번 행은 여전히 NULL로 남아 있었을 것입니다.

이처럼 UPDATE + CONCAT + IFNULL 조합은 로그 누적, 태그 추가, 메모 필드 확장 등 기존 데이터를 보존하면서 값을 덧붙여야 하는 상황에서 매우 유용하게 활용됩니다.