MySQL에서 여러 개의 레코드를 하나의 쿼리로 동시에 삽입하려면 INSERT INTO ... SELECT 구문과 UNION을 함께 사용할 수 있습니다. 각 SELECT 절이 반환하는 한 행씩이 테이블에 삽입되며, UNION으로 여러 SELECT를 연결하면 원하는 만큼의 행을 한 번에 추가할 수 있습니다.
기본 문법
여러 개의 데이터를 삽입할 때 사용하는 기본 문법은 다음과 같습니다.
insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,..N) select yourValue1 as yourColumnName1,yourValue2 as yourColumnName2,yourValue3 as yourColumnName3,......N union select yourValue1 as yourColumnName1,yourValue2 as yourColumnName2,yourValue3 as yourColumnName3,......N . . N
각 SELECT 절에서 별칭(alias)을 지정해 컬럼 이름을 명시적으로 표현하면 코드의 가독성이 크게 향상됩니다.
예제 테이블 생성
위 문법을 실제로 확인해 보기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1936 ( StudentId int, StudentName varchar(20), StudentCountryName varchar(20) ); Query OK, 0 rows affected (0.00 sec)
학생 ID, 이름, 국가명을 저장하는 세 개의 컬럼으로 구성된 테이블이 정상적으로 생성되었습니다.
INSERT INTO SELECT와 UNION으로 데이터 삽입
이제 insert 명령과 UNION을 조합하여 세 개의 레코드를 한 번에 삽입해 보겠습니다.
mysql> insert into DemoTable1936(StudentId,StudentName,StudentCountryName) select 1001 as StudentId,'Chris' as StudentName,'US' as StudentCountryName union select 1002 as StudentId,'Robert' as StudentName,'UK' as StudentCountryName union select 1003 as StudentId,'David' as StudentName,'AUS' as StudentCountryName; Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0
실행 결과를 보면 중복 없이 3개의 레코드가 성공적으로 삽입된 것을 확인할 수 있습니다.
삽입 결과 확인
select 문을 사용하여 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1936;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+-------------+--------------------+ | StudentId | StudentName | StudentCountryName | +-----------+-------------+--------------------+ | 1001 | Chris | US | | 1002 | Robert | UK | | 1003 | David | AUS | +-----------+-------------+--------------------+ 3 rows in set (0.00 sec)
참고 사항
MySQL 8.0 이상에서는 INSERT INTO 테이블명 VALUES (...), (...), (...) 형태의 다중 행 VALUES 구문도 지원하므로 상황에 따라 더 간결하게 사용할 수 있습니다. 다만 INSERT INTO SELECT와 UNION을 활용하면 조건부 선택이나 다른 테이블과의 결합 등 더 유연한 데이터 삽입 로직을 구성할 수 있다는 장점이 있습니다.