MySQL에서 한 번의 쿼리로 여러 레코드를 삽입하거나 일괄 삽입(batch insert)을 수행하려면 VALUES()를 콤마(,)로 구분하여 사용해야 합니다. 이 방식은 INSERT 실행 시 잘못된 MySQL 쿼리가 발생하는 것을 방지하며, 개별 INSERT 문을 반복 실행하는 것보다 성능 면에서도 훨씬 유리합니다.
일괄 삽입 기본 문법
INSERT INTO yourTableName VALUES(yourValue1),(yourValue2),(yourValue3),(yourValue4),(yourValue5),.......N;
각 값 묶음을 괄호 ()로 감싸고, 그 사이를 콤마로 구분하면 됩니다. 하나의 INSERT 문으로 수백, 수천 개의 행도 손쉽게 처리할 수 있습니다.
예제 테이블 생성
문법을 실제로 이해하기 위해 간단한 테이블을 먼저 생성해 보겠습니다.
mysql> create table addMultipleValues
-> (
-> Counter int NOT NULL
-> );
Query OK, 0 rows affected (0.60 sec)정수형 컬럼 Counter 하나만 가진 addMultipleValues 테이블이 정상적으로 생성되었습니다.
VALUES 콤마 구분으로 여러 레코드 삽입
이제 VALUES()를 콤마로 구분하여 테이블에 10개의 레코드를 한 번에 삽입해 보겠습니다.
mysql> insert into addMultipleValues values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10); Query OK, 10 rows affected (0.27 sec) Records: 10 Duplicates: 0 Warnings: 0
실행 결과를 보면 단 한 번의 쿼리로 10개의 행이 모두 삽입되었으며, 중복 없이 경고도 없이 정상 처리된 것을 확인할 수 있습니다.
삽입 결과 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 삽입 결과를 검증해 보겠습니다.
mysql> select * from addMultipleValues;
실행 결과는 다음과 같습니다.
+---------+ | Counter | +---------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +---------+ 10 rows in set (0.00 sec)
정리 및 참고 사항
이처럼 VALUES(...),(...),(...) 형태를 사용하면 네트워크 왕복 횟수와 쿼리 파싱 오버헤드가 크게 줄어들어 대량 데이터 적재 시 속도가 눈에 띄게 향상됩니다. 다만 한 번에 삽입하는 행 수가 지나치게 많으면 max_allowed_packet 설정 크기를 초과할 수 있으므로, 대용량 데이터는 적절한 크기로 나누어 일괄 삽입하는 것이 좋습니다.