MySQL에서 일괄 삽입을 수행하는 방법


148

테이블에 입력 해야하는 레코드 수는 1 개입니다. 쿼리에서이를 수행하는 가장 좋은 방법은 무엇입니까? 루프를 만들고 반복 당 하나의 레코드를 삽입해야합니까? 아니면 더 좋은 방법이 있습니까?


1
사용하기 전에 설명이나 기능에 대한 설명서를 읽으십시오. INSERT이것을 기본적으로 지원합니다 !
궤도에서 가벼움 경주

3
실제로 많은 수의 레코드가 있고이를 CSV 파일로 형식화 할 수있는 경우 LOAD DATA INFILE 문 또는 mysqlimport 명령을 확인하십시오.
squawknull

레코드의 경우, LOAD DATA 는 CSV 입력이 필요 없는 매우 유연한 명령입니다 . 모든 텍스트 형식이 수행되며 입력 데이터를 구문 분석하고 조작하는 데 유용한 매개 변수가 많이 있습니다. 이것은 확실히 로컬 DB에 데이터를로드 하는 가장 빠른 방법입니다. 위의 "최고"가 무엇을 의미하는지는 명확하지 않습니다. 즉, 단순성 (INSERT 문 사용)이 속도를 능가하는지 (LOAD DATA 사용).
EdwardGarson

답변:


298

로부터 MySQL의 설명서

VALUES 구문을 사용하는 INSERT 문은 여러 행을 삽입 할 수 있습니다. 이렇게하려면 각각 괄호로 묶고 쉼표로 구분 된 여러 열 값 목록을 포함하십시오. 예:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

7
데이터로드 파일로드보다 속도가 느립니까?
srchulo

저장 프로 시저에서이 insert 문을 작성하는 구문은 무엇입니까?
Nitin Sawant

@Nitin 같은 구문이 아닐까요 .. ??? 그것은 내가 어쨌든 SQL Server에서 할 것입니다.
광고

13
질문에 " 일괄 삽입 을 수행하는 방법"이라는 레이블이 붙어 있지만 이 답변은 실제로 대량 삽입입니다. 대량은 일반적으로 빠른 참조입니다 이 질문
마이크 Demenok

2
@Koffeehaus @Lukman의 SO 답변에 따라 삽입 가능한 값 / 행의 수는 다음으로 제한됩니다.max_allowed_packet
Sepster

22

대부분의 경우 MySQL 클라이언트에서 작업하고 있지 않으므로 적절한 API를 사용하여 삽입을 일괄 처리해야합니다.

예를 들어 JDBC에서 :

connection con.setAutoCommit(false); 
PreparedStatement prepStmt = con.prepareStatement("UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
prepStmt.setString(1,mgrnum1);                 
prepStmt.setString(2,deptnum1);
prepStmt.addBatch();

prepStmt.setString(1,mgrnum2);                        
prepStmt.setString(2,deptnum2);
prepStmt.addBatch();

int [] numUpdates=prepStmt.executeBatch();

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvbtupd.htm


5
일괄 삽입에 대한 좋은 블로그 항목 (자바 언어이지만 모든 언어와 관련이 있음) : viralpatel.net/blogs/batch-insert-in-java-jdbc
Kangur


6

데이터 인 파일 쿼리로드가 훨씬 더 나은 옵션이지만 godaddy와 같은 일부 서버는 공유 호스팅 에서이 옵션을 제한하므로 두 가지 옵션 만 남으면 하나의 반복 또는 일괄 삽입마다 레코드를 삽입하지만 쿼리를 초과하면 일괄 삽입에 문자 제한이 있습니다. mysql에 설정된 문자 수 다음 쿼리가 중단됩니다. 따라서 일괄 삽입을 사용하여 청크에 데이터를 삽입하는 것이 좋습니다. 이는 데이터베이스로 설정된 연결 수를 최소화합니다.


1
어때LOAD DATA LOCAL INFILE '/users/name/txt.file'
double_j

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.