it-source

MySQL - 하나의 INSERT 문에 몇 개의 행을 삽입할 수 있습니까?

criticalcode 2023. 1. 15. 16:58
반응형

MySQL - 하나의 INSERT 문에 몇 개의 행을 삽입할 수 있습니까?

설정된 값의 수에 따라 달라집니까?INSERT 문의 바이트 수에 따라 달라집니까?

다음을 사용하여 무한히 많은 레코드를 삽입할 수 있습니다.INSERT ... SELECT패턴(다른 테이블에 해당 레코드 또는 그 일부가 있는 경우)을 클릭합니다.

그러나 값을 하드코딩하는 경우INSERT ... VALUES패턴에서는 스테이트먼트의 크기/길이에 제한이 있습니다.max_allowed_packet은 클라이언트가 데이터베이스 서버에 송신하는 SQL 스테이트먼트의 길이를 제한하며 INSERT 스테이트먼트뿐만 아니라 모든 유형의 쿼리에 영향을 미칩니다.

이상적으로는 Mysql을 사용하면 (한 번에) 한 번 삽입으로 무한한 수의 행을 생성할 수 있지만

MySQL 클라이언트 또는 mysqld 서버가 max_allowed_packet 바이트보다 큰 패킷을 수신하면 Packet too large 오류가 발생하고 연결이 닫힙니다.

max_allowed_packet 변수의 기본값을 표시하려면 MySQL에서 다음 명령을 수행합니다.

show variables like 'max_allowed_packet';

표준 MySQL 설치 기본값은 1048576바이트(1MB)입니다.이 값은 세션 또는 연결에 대해 더 높은 값으로 설정하면 늘릴 수 있습니다.

그러면 모든 사용자의 값이 500MB로 설정됩니다(GLOBAL의 의미).

SET GLOBAL max_allowed_packet=524288000;

새로운 접속으로 새로운 단말기의 변경을 확인합니다.

show variables like 'max_allowed_packet';

이제 무한 레코드 삽입에 대한 오류 없이 작동합니다.감사해요.

쿼리는 다음으로 제한됩니다.max_allowed_packet일반적으로

max_allowed_packet 제한에 도달합니다.

오류: 1390 준비된 문에 자리 표시자가 너무 많습니다.

1개의 SQL에 65535개의 플레이스 홀더를 넣을 수 있습니다.따라서 한 행에 두 개의 열이 있는 경우 32767 행을 하나의 SQL에 삽입할 수 있습니다.

MySQL에서 50K+ 레코드를 가져오면 일반 오류가 발생함: 1390 준비된 문에 자리 표시자가 너무 많습니다.

mysql 설정에 관한 내용은 http://forums.mysql.com/read.php?20,161869,을 참조하십시오.max_allowed_packet,bulk_insert_buffer_size,key_buffer_size.

1개의 INSERT 문으로 무제한의 행을 삽입할 수 있습니다.예를 들어 INSERT 쿼리를 실행할 때마다 루프가 수천 번 실행되는 저장 프로시저를 실행할 수 있습니다.

또는 INSERT가 트리거를 작동시켜 INSERT를 수행할 수 있습니다.다른 방아쇠를 당기는 거죠기타 등등.

아니요, 값 집합의 수에 따라 달라지지 않습니다.또한 바이트 수에 의존하지 않습니다.

괄호의 깊이와 전체 문장의 길이에는 제한이 있습니다.아이러니하게도 이 두 가지 방법은 모두 thedailywtf.com에서 참조되고 있습니다.단, 위에서 설명한 두 가지 방법은 모두 이러한 제한을 회피합니다.

INSERT마다 삽입할 수 있는 행의 수는 정해져 있지 않지만, 일반적으로 쿼리의 최대 크기는 정해져 있을 수 있습니다.

max_allowed_packet으로 됩니다.
같이 할 수 .mysqld --max_allowed_packet=32M16M로 하다
/etc/mysql/etc/mysql/mysql/mysql/mysql/my.cnf로 도 있습니다.

언급URL : https://stackoverflow.com/questions/3536103/mysql-how-many-rows-can-i-insert-in-one-single-insert-statement

반응형