MySQL에서 두 개의 테이블을 하나로 병합하려면 INSERT IGNORE 구문과 함께 SELECT 문을 사용하면 됩니다. 기본 문법은 다음과 같습니다.
INSERT IGNORE INTO 대상테이블명 SELECT * FROM 원본테이블명;
여기서 IGNORE 키워드는 중요한 역할을 합니다. 병합 과정에서 기본 키(primary key)가 중복되는 행이 발생하면 오류를 발생시키는 대신 해당 행을 조용히 건너뛰기 때문입니다.
실제 동작을 확인하기 위해 샘플 데이터가 들어 있는 두 개의 테이블을 만들고, 위 문법으로 병합 과정을 진행해 보겠습니다.
1. 첫 번째 테이블 생성
mysql> create table MergeDemo1 -> ( -> id int, -> primary key(id), -> Name varchar(200) -> ); Query OK, 0 rows affected (1.00 sec)
첫 번째 테이블에 레코드 삽입
mysql> insert into MergeDemo1 values(1,'John'); Query OK, 1 row affected (0.21 sec)
첫 번째 테이블 조회
mysql> select *from MergeDemo1;
실행 결과는 다음과 같습니다.
+----+------+ | id | Name | +----+------+ | 1 | John | +----+------+ 1 row in set (0.00 sec)
2. 두 번째 테이블 생성
mysql> create table MergeDemo2 -> ( -> id int, -> primary key(id), -> Name varchar(200) -> ); Query OK, 0 rows affected (0.51 sec)
두 번째 테이블에 레코드 삽입
mysql> insert into MergeDemo2 values(2,'David'); Query OK, 1 row affected (0.18 sec)
두 번째 테이블 조회
mysql> select *from MergeDemo2;
실행 결과는 다음과 같습니다.
+----+-------+ | id | Name | +----+-------+ | 2 | David | +----+-------+ 1 row in set (0.00 sec)
3. 두 테이블 병합하기
이제 INSERT IGNORE ... SELECT 문을 사용하여 두 번째 테이블(MergeDemo2)의 데이터를 첫 번째 테이블(MergeDemo1)로 병합합니다.
mysql> INSERT IGNORE -> INTO MergeDemo1 select *from MergeDemo2; Query OK, 1 row affected (0.19 sec) Records: 1 Duplicates: 0 Warnings: 0
4. 병합 결과 확인
SELECT 문으로 두 번째 테이블의 데이터가 정상적으로 병합되었는지 확인해 보겠습니다.
mysql> select *from MergeDemo1;
아래 출력 결과에서 두 테이블의 데이터가 하나로 합쳐진 것을 확인할 수 있습니다.
+----+-------+ | id | Name | +----+-------+ | 1 | John | | 2 | David | +----+-------+ 2 rows in set (0.00 sec)
정리 및 참고 사항
이처럼 INSERT IGNORE INTO ... SELECT * 구문을 사용하면 두 테이블을 손쉽게 병합할 수 있습니다. 몇 가지 유의할 점은 다음과 같습니다.
- 컬럼 구조 일치: 두 테이블의 컬럼 수와 순서, 데이터 타입이 서로 호환되어야 안전하게 복사됩니다.
- 중복 처리: 기본 키나 UNIQUE 제약 조건이 걸린 값이 중복되면 IGNORE 옵션 덕분에 오류 없이 해당 행만 제외됩니다.
- 특정 컬럼만 병합: 전체가 아닌 필요한 컬럼만 옮기고 싶다면 SELECT * 대신 SELECT id, Name처럼 컬럼을 명시하면 됩니다.
- 조건부 병합: WHERE 절을 추가하면 특정 조건에 맞는 행만 선택적으로 병합할 수도 있습니다.