MySQL에서 기존 데이터를 그대로 유지한 채 새로운 데이터를 추가하고 싶다면 UPDATE 문과 CONCAT() 함수를 함께 사용하면 됩니다. 이 방법은 컬럼의 기존 값 뒤에 새 값을 연결(append)하여 저장하기 때문에, 이전 데이터가 삭제되지 않습니다.
기본 문법
update yourTableName set yourColumnName=concat(yourColumnName,',yourValue');
위 문법에서 CONCAT() 함수는 기존 컬럼 값과 새로운 값을 하나의 문자열로 합쳐줍니다.
예제 테이블 생성
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> create table DemoTable -> ( -> CustomerName varchar(100) -> ); Query OK, 0 rows affected (0.54 sec)
데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 입력합니다.
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.14 sec)현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+--------------+ | CustomerName | +--------------+ | Chris | | David | | Sam | +--------------+ 3 rows in set (0.00 sec)
기존 데이터를 유지하며 업데이트하기
이제 기존 데이터를 삭제하지 않고 새로운 값 'Brown'을 추가하는 UPDATE 쿼리를 실행해 보겠습니다.
mysql> update DemoTable set CustomerName=concat(CustomerName,',Brown'); Query OK, 3 rows affected (0.14 sec) Rows matched: 3 Changed: 3 Warnings: 0
쿼리 실행 후 테이블의 레코드를 다시 한번 확인해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+--------------+ | CustomerName | +--------------+ | Chris,Brown | | David,Brown | | Sam,Brown | +--------------+ 3 rows in set (0.00 sec)
결과를 보면 각 고객 이름 뒤에 ',Brown'이 연결되어 기존 데이터가 그대로 보존된 것을 확인할 수 있습니다. 이처럼 CONCAT() 함수를 활용하면 데이터를 덮어쓰지 않고 기존 값에 새로운 정보를 손쉽게 추가할 수 있습니다.