MySQL에서 데이터를 삽입할 때 단일 행만 처리하는 것은 비효율적일 수 있다.
특히 대량의 데이터를 다루는 환경에서는 INSERT 다중 행 삽입(Multiple Row Insert)을 통해 성능을 향상시키고 작업 시간을 대폭 줄일 수 있다.

INSERT 다중 행 삽입이란?
MySQL의 INSERT INTO ... VALUES 구문은 한 번에 여러 행을 입력할 수 있도록 설계되어 있다.
각 행은 괄호로 감싸고 콤마(,)로 구분하면 된다.
이 방식은 반복적인 단일 INSERT보다 훨씬 빠르고 효율적이며,
특히 네트워크 왕복 횟수가 줄어들기 때문에 성능에도 긍정적인 영향을 준다.
기본 구문
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES
(값1, 값2, ...),
(값1, 값2, ...),
(값1, 값2, ...);
컬럼 개수와 값 개수는 반드시 일치해야 하며,
필요에 따라 DEFAULT나 NULL이 설정된 컬럼은 생략이 가능하다.
기본 예제 – users 테이블에 여러 사용자 삽입
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
INSERT INTO users (id, name, age)
VALUES
(1, '김철수', 28),
(2, '이영희', 32),
(3, '박민수', 25),
(4, '최지은', 30);
이 예제는 users 테이블에 4명의 사용자 정보를 한 번에 삽입하는 방식이다.
각각 따로 INSERT하는 것보다 성능상 훨씬 효율적이다.
실전 예제 – 제품 마스터 일괄 등록
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
price INT
);
INSERT INTO products (product_id, product_name, price)
VALUES
(101, '무선 마우스', 23000),
(102, '기계식 키보드', 79000),
(103, 'HDMI 케이블', 12000),
(104, 'USB 허브', 17500);
전자상거래 시스템 초기 데이터 등록, ERP 마스터 구축 시 자주 사용되는 패턴이다.
특히 많은 수의 레코드를 한 번에 처리해야 할 경우 이 방식이 필수적이다.
일부 컬럼만 지정하여 다중 삽입
테이블의 모든 컬럼을 사용할 필요는 없다.
NULL 허용이나 DEFAULT가 지정된 컬럼은 생략 가능하다.
INSERT INTO users (id, name)
VALUES
(5, '홍길동'),
(6, '김길동');
이 경우 age 컬럼은 NULL이거나 기본값으로 자동 채워진다.
INSERT 다중 행 삽입 시 주의사항
- 기본 키(PK)가 중복되면 전체 INSERT 문이 실패한다
- INSERT 속도는 괄호 안의 값 개수에 따라 달라지므로, 너무 많은 행을 한 번에 삽입하지 말 것
- 다중 행 삽입 중 하나라도 에러가 발생하면 전체 트랜잭션이 롤백될 수 있다
- 트랜잭션과 함께 사용하면 데이터 무결성을 더욱 안전하게 보장할 수 있다
INSERT 다중 행 삽입과 트랜잭션 조합 예제
SET autocommit = 0;
START TRANSACTION;
INSERT INTO users (id, name, age)
VALUES
(10, '김성현', 26),
(11, '전민정', 30),
(12, '송하늘', 27);
COMMIT;
트랜잭션을 함께 사용하면 삽입 중 오류 발생 시 ROLLBACK으로 전체 작업을 취소할 수 있어 안전하다.
이 방식은 실무에서 자주 사용되는 패턴이며, 시스템 안정성 확보에 매우 효과적이다.
다중 행 INSERT의 성능 이점
단일 INSERT를 여러 번 실행하면 네트워크 I/O가 반복되기 때문에 성능이 떨어질 수 있다.
하지만 다중 행 INSERT는 하나의 SQL 실행으로 여러 개의 데이터를 처리할 수 있으므로
전체 성능이 3~10배 이상 향상될 수 있다.
대용량 초기 데이터 로딩, 테스트 시나리오 구성, 이관 작업 등에 반드시 고려해야 할 기법이다.
요약
- INSERT 다중 행 삽입은 VALUES 절에 여러 괄호로 나열하는 방식이다
- 성능 향상과 유지보수 측면 모두에서 단일 삽입보다 효율적이다
- 트랜잭션과 함께 사용할 경우 무결성과 안정성이 극대화된다
- 실무에서 자주 쓰이는 마스터 데이터 입력, 이관, 테스트 데이터 생성에 매우 적합하다
공식 문서 참고
MySQL 공식 INSERT 문서
https://dev.mysql.com/doc/refman/8.0/en/insert.html
'DB' 카테고리의 다른 글
| [MySQL] INSERT + SELECT 사용법 완벽 가이드 (0) | 2025.06.20 |
|---|---|
| [MySQL] 있으면 UPDATE, 없으면 INSERT (오라클의 MERGE INTO) (2) | 2025.06.19 |
| [MySQL] INSERT IGNORE 사용법 완벽 가이드(데이터 중복 방지) (0) | 2025.06.19 |
| [MySQL] INSERT INTO ... SET 사용법 완벽 가이드 (1) | 2025.06.19 |
| [MySQL] INSERT 기본 사용법 완벽 가이드 (0) | 2025.06.19 |
| [MySQL] SET autocommit = 0/1 완벽 가이드 사용법(오토커밋 설정) (2) | 2025.06.18 |
| [MySQL] RELEASE SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 삭제) (0) | 2025.06.18 |
| [MySQL] ROLLBACK TO SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 까지 롤백) (1) | 2025.06.18 |