MySQL에서 이미 데이터가 저장되어 있는 필드에 새로운 값을 덧붙이고(append) 싶을 때가 있습니다. 이럴 때는 MySQL의 내장 함수인 CONCAT()을 사용하면 간단하게 해결할 수 있습니다.
CONCAT() 함수를 이용한 데이터 추가 문법
기본적인 UPDATE 문법은 다음과 같습니다.
UPDATE yourTableName
SET yourColumnName = CONCAT(yourColumnName, '추가할값');
CONCAT() 함수는 여러 문자열을 하나로 연결해 주는 역할을 합니다. 위 쿼리는 기존 컬럼 값 뒤에 지정한 문자열을 그대로 붙여 넣습니다.
실습 예제: 테이블 생성
개념을 확실히 이해하기 위해 실제 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE AppendingDataDemo
-> (
-> FirstNameAndLastName VARCHAR(200)
-> );
Query OK, 0 rows affected (0.59 sec)
샘플 데이터 삽입
INSERT 명령어로 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO AppendingDataDemo VALUES('John');
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO AppendingDataDemo VALUES('Bob');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO AppendingDataDemo VALUES('Carol');
Query OK, 1 row affected (0.30 sec)현재 데이터 확인
SELECT 문으로 저장된 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM AppendingDataDemo;
실행 결과는 다음과 같습니다.
+----------------------+
| FirstNameAndLastName |
+----------------------+
| John |
| Bob |
| Carol |
+----------------------+
3 rows in set (0.00 sec)
기존 값 뒤에 'Taylor' 추가하기
이제 컬럼에 이미 들어 있는 이름 뒤에 성(Taylor)을 덧붙여 보겠습니다. 아래와 같이 UPDATE 문과 CONCAT() 함수를 함께 사용하면 됩니다.
mysql> UPDATE AppendingDataDemo
SET FirstNameAndLastName = CONCAT(FirstNameAndLastName, ' Taylor');
Query OK, 3 rows affected (0.10 sec)
Rows matched: 3 Changed: 3 Warnings: 0
결과 메시지를 보면 3개 행이 모두 정상적으로 변경된 것을 확인할 수 있습니다.
변경 결과 확인
다시 SELECT 문으로 데이터가 제대로 추가되었는지 확인해 보겠습니다.
mysql> SELECT * FROM AppendingDataDemo;
실행 결과:
+----------------------+
| FirstNameAndLastName |
+----------------------+
| John Taylor |
| Bob Taylor |
| Carol Taylor |
+----------------------+
3 rows in set (0.00 sec)
추가 팁: NULL 값 처리하기
CONCAT() 함수는 인수 중 하나라도 NULL이면 전체 결과가 NULL이 되므로 주의해야 합니다. 컬럼에 NULL 값이 포함될 가능성이 있다면 CONCAT_WS()나 IFNULL() 함수를 함께 사용하는 것이 안전합니다.
UPDATE AppendingDataDemo
SET FirstNameAndLastName = CONCAT(IFNULL(FirstNameAndLastName, ''), ' Taylor');
이렇게 하면 기존 값이 NULL인 경우에도 빈 문자열로 처리되어 오류 없이 데이터를 추가할 수 있습니다.