MySQL에서는 INSERT 문의 VALUES 절에 각 행의 값을 괄호로 묶어 쉼표(,)로 구분해 나열함으로써, 단 하나의 쿼리만으로 여러 행(row)을 동시에 삽입할 수 있습니다.
기본 문법
여러 행을 삽입하는 기본 문법은 다음과 같습니다.
insert into yourTableName values(value1,value2,...N),(value1,value2,...N),(value1,value2,...N),(value1,value2,...N),(value1,value2,...N),(value1,value2,...N)................N;
각 괄호 () 안에는 해당 행에 들어갈 컬럼 값들이 순서대로 위치하며, 괄호 묶음 사이를 쉼표로 구분하면 됩니다.
예제용 테이블 생성
실제 동작 과정을 확인하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table MultipleRowsInsert
−> (
−> UserId int,
−> UserName varchar(200)
−> );
Query OK, 0 rows affected (1.21 sec)
UserId와 UserName 두 개의 컬럼을 가진 테이블이 정상적으로 생성되었습니다.
여러 행 삽입 쿼리 실행
이제 위 테이블에 5명의 사용자 데이터를 한 번의 쿼리로 삽입해 보겠습니다.
mysql> insert into MultipleRowsInsert values(100,'Bob'),(101,'Smith'),(102,'Carol'),(104,'David'),(105,'Sam');
Query OK, 5 rows affected (0.33 sec)
Records: 5 Duplicates: 0 Warnings: 0
실행 결과 메시지를 보면 총 5개의 행이 성공적으로 삽입되었으며, 중복(Duplicates)이나 경고(Warnings) 없이 깔끔하게 처리된 것을 확인할 수 있습니다.
삽입 결과 확인하기
SELECT 문을 사용해 테이블에 저장된 전체 레코드를 조회해 보겠습니다.
mysql> select *from MultipleRowsInsert;
실행 결과는 다음과 같습니다.
+--------+----------+
| UserId | UserName |
+--------+----------+
| 100 | Bob |
| 101 | Smith |
| 102 | Carol |
| 104 | David |
| 105 | Sam |
+--------+----------+
5 rows in set (0.00 sec)
5개의 행이 모두 정상적으로 저장된 것을 확인할 수 있습니다.
참고 사항
행마다 별도의 INSERT 문을 실행하는 방식과 비교했을 때, 단일 쿼리로 여러 행을 삽입하면 데이터베이스와의 네트워크 왕복 횟수가 크게 줄어들어 대량 데이터 입력 시 성능이 눈에 띄게 향상됩니다. 다만 한 번에 삽입하는 데이터 양이 매우 클 경우에는 MySQL의 max_allowed_packet 설정값을 함께 확인하는 것이 좋습니다.