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

MySQL에서 두 개의 테이블을 병합하는 방법 – INSERT IGNORE 완벽 가이드

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 절을 추가하면 특정 조건에 맞는 행만 선택적으로 병합할 수도 있습니다.