본문 바로가기
일하딩/Mysql

[Mysql] Insert 대량으로 하는 방법. (mybatis 에서도)

by 별난형 2020. 11. 11.

사이트를 만들면서

 

Insert 를 대량으로 한번에 처리하는 경우가 종종 발생한다.

 

이럴 때 단순히 Insert 를 여러번 시도하면 Web 서버와 DB 서버간에 Connection 이 여러번 발생하여

 

둘중 한 서버가 죽는 일이 종종 발생한다.

 

이럴때

 

한번에 대량으로 Insert 하는 방법이 있다.

 

물론 동일한 테이블에 한해서....

 

INSERT INTO dbtable(
	columna, 
	columnb, 
	columnc, 
	columnd
)VALUES
('valuea1', 'valueb1', 'valuec1', 'valued1'),
('valuea2', 'valueb2', 'valuec2', 'valued2'),
('valuea3', 'valueb3', 'valuec3', 'valued3'),
('valuea4', 'valueb4', 'valuec4', 'valued4')

 

위와 같이 테이블의 컬럼을 지정하고 values 부분에 여러 건의 데이터를 넣어서 실행하면

 

한번에 Insert 가 진행된다.

 

혹 mybatis 에서 사용을 하게 된다면

 

<insert id="insert" parameterType="java.util.List">
INSERT INTO dbtable(
	columna, 
	columnb, 
	columnc,
	columnd
)VALUES
<foreach collection="list" item="item" separator=" , ">
(
	#{item.valuea},
	#{item.valueb},
	#{item.valuec},
	#{item.valued}
)
</foreach>
</insert>

 

foreach 구문을 사용하여 values 를 중복 처리해 주면 된다.

 

참고로 대량으로 Insert 를 진행할때는 앞서 설명한 Merge 를 같이 진행할 수 없다.

 

mohading.tistory.com/22

 

[Mysql] Merge 하는 방법

Merge 란 Key 에 해당하는 데이터가 없으면 Insert. 있으면 Update 하는 기능이다. Mysql 에서는 Merge 구문이 따로 없다. 하지만 다른 방법을 사용해서 Merge 를 할 수 있다. INSERT INTO tablenm( column1, colu..

mohading.tistory.com

Duplicate key 는 한 건씩 Insert 할 때만 사용이 가능하다. 

댓글