MySQL에서는 INSERT 문 하나만으로 여러 개의 행(row)을 동시에 테이블에 삽입할 수 있습니다. 각 행의 값을 괄호로 묶고, 쉼표(,)로 구분해 나열하면 됩니다. 이 방식은 레코드마다 별도의 INSERT 문을 실행하는 것보다 네트워크 왕복 횟수와 쿼리 파싱 오버헤드가 줄어들어, 대량의 데이터를 입력할 때 성능 면에서 훨씬 유리합니다.
기본 문법
멀티 로우 INSERT의 기본 문법은 다음과 같습니다.
insert into yourTableName values(yourValue1,yourValue2,.....N), (yourValue1,yourValue2,.....N), (yourValue1,yourValue2,.....N), (yourValue1,yourValue2,.....N), . . . N
예제: 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table demo56 -> ( -> id int, -> first_name varchar(20), -> last_name varchar(20), -> age int -> ); Query OK, 0 rows affected (1.91 sec)
id, first_name, last_name, age 네 개의 컬럼을 가진 demo56 테이블이 정상적으로 생성되었습니다.
여러 레코드 한 번에 삽입하기
이제 INSERT 문 하나로 4명의 회원 정보를 동시에 삽입합니다.
mysql> insert into demo56 values(1,'John','Smith',23), -> (2,'David','Miller',21), -> (3,'Chris','Brown',22), -> (4,'Carol','Taylor',20); Query OK, 4 rows affected (0.10 sec) Records: 4 Duplicates: 0 Warnings: 0
실행 결과 메시지의 "Query OK, 4 rows affected" 부분을 보면, 단 한 번의 쿼리 실행으로 4개의 레코드가 모두 정상적으로 삽입되었음을 확인할 수 있습니다.
삽입 결과 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from demo56;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+------------+-----------+------+ | id | first_name | last_name | age | +------+------------+-----------+------+ | 1 | John | Smith | 23 | | 2 | David | Miller | 21 | | 3 | Chris | Brown | 22 | | 4 | Carol | Taylor | 20 | +------+------------+-----------+------+ 4 rows in set (0.00 sec)
정리
멀티 로우 INSERT를 활용하면 다음과 같은 장점이 있습니다.
- 성능 향상: 쿼리 실행 횟수가 줄어들어 대량 데이터 입력 시 처리 속도가 크게 개선됩니다.
- 트랜잭션 관리 용이: 하나의 문장으로 처리되므로 데이터 일관성(원자성)을 확보하기 쉽습니다.
- 코드 간결화: 반복적인 INSERT 문 작성 없이 깔끔하고 가독성 좋은 코드를 유지할 수 있습니다.