2010-08-21 26 views

Respuesta

0

Creo que no hay un número definido de filas que está limitado a insertar por INSERT, pero puede haber algún tipo de tamaño máximo para las consultas en general.

4

Puede insertar un número infinito de filas con una instrucción INSERT. Por ejemplo, puede ejecutar un procedimiento almacenado que tiene un ciclo ejecutado mil veces, cada vez que ejecuta una consulta INSERTAR.

O su INSERT podría disparar un disparador que realiza un INSERT. Que dispara otro disparador. Y así.

No, no depende del número de conjuntos de valores. Tampoco depende de la cantidad de bytes.

Existe un límite de cuán profundamente anidado puede estar el paréntesis, y un límite de cuánto tiempo es su total. Ambos irrenunciados, irónicamente, en thedailywtf.com. Sin embargo, los dos medios que mencioné anteriormente superan estos límites.

+0

Sus ejemplos son múltiples para ejecutar INSERT, y no se muestran sobre la inserción de múltiples filas en una ** ** instrucción INSERT .. – Lukman

+0

@Lukman: Una consulta INSERT puede dar lugar a múltiples insertos que golpean la base de datos . Solo se trata de quién cuenta qué. – Borealid

+2

cierto eso, pero su primer ejemplo muestra sobre la ejecución de consultas en un bucle con cada bucle ejecutando una instrucción INSERT, y no dice nada acerca de esa instrucción INSERT que inserta múltiples filas. es solo una cuestión de énfasis. – Lukman

74

Puede insertar un número infinitamente grande de registros usando el patrón INSERT ... SELECT, siempre que tenga esos registros, o parte de, en otras tablas.

Pero si está codificando los valores con el patrón INSERT ... VALUES, existe un límite en cuanto a la longitud/longitud de la declaración: max_allowed_packet que limita la longitud de las sentencias SQL enviadas por el cliente al servidor de la base de datos. afecta cualquier tipo de consultas y no solo para la instrucción INSERT.

19

La consulta está limitada por max_allowed_packet en general.

1

Está limitado por max_allowed_packet.
Puede especificar usando: mysqld --max_allowed_packet=32M Es por defecto 16M.
También puede especificar en my.cnf en/etc/mysql/

20

Idealmente, MySQL permite infinidad de creación filas en una sola pieza de inserción (a la vez), pero cuando un

cliente MySQL o el servidor mysqld recibe un paquete más grande que max_allowed_packet bytes, emite un paquete demasiado grande error y se cierra la conexión.

Para ver cuál es el valor por defecto es para la variable max_allowed_packet, ejecute el siguiente comando en en MySQL:

show variables like 'max_allowed_packet';

instalación estándar MySQL tiene un valor predeterminado de 1048576 bytes (1 MB). Esto se puede aumentar al establecerlo en un valor más alto para una sesión o conexión.

Esto establece el valor a 500 MB para todos (eso es lo que significa GLOBAL):

SET GLOBAL max_allowed_packet=524288000;

comprobar su cambio en la nueva terminal con conexión nueva:

show variables like 'max_allowed_packet';

Ahora debería trabajar sin ningún error para la inserción de registros infinitos. Gracias

+4

500 MB no es infinito. Es mucho más grande que el valor predeterminado, pero aún así, no infinito. – Carlos2W

Cuestiones relacionadas