¿Depende del número de conjuntos de valores? ¿Depende del número de bytes en la instrucción INSERT?
Respuestas:
Puede insertar una cantidad infinita de registros utilizando INSERT ... SELECT
patrón, siempre que tenga esos registros, o parte de, en otras tablas.
Pero si está codificando los valores usando un INSERT ... VALUES
patrón, entonces hay un límite en el tamaño / largo de su declaración: max_allowed_packet que limita la longitud de las declaraciones SQL enviadas por el cliente al servidor de la base de datos y afecta cualquier tipo de consulta y no solo para la instrucción INSERT.
Idealmente, Mysql permite la creación de un número infinito de filas en una sola inserción (a la vez) pero cuando un
El cliente MySQL o el servidor mysqld recibe un paquete mayor que max_allowed_packet bytes, emite un error de paquete demasiado grande y cierra la conexión.
Para ver cuál es el valor predeterminado para la variable max_allowed_packet, ejecute el siguiente comando en MySQL:
show variables like 'max_allowed_packet';
La instalación estándar de MySQL tiene un valor predeterminado de 1048576 bytes (1 MB). Esto se puede aumentar configurándolo en un valor más alto para una sesión o conexión.
Esto establece el valor en 500 MB para todos (eso es lo que significa GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
verifique su cambio en nuevo terminal con nueva conexión:
show variables like 'max_allowed_packet';
Ahora debería funcionar sin ningún error para insertar registros infinitos. Gracias
strlen($query_with_questionmarks) < $max_alloweed_packet
?
La consulta está limitada por max_allowed_packet
en general.
se refiere a http://forums.mysql.com/read.php?20,161869 , que está relacionado con la configuración de su mysql: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Puede insertar un número infinito de filas con una instrucción INSERT. Por ejemplo, podría ejecutar un procedimiento almacenado que tiene un bucle ejecutado mil veces, cada vez que ejecuta una consulta INSERT.
O su INSERT podría disparar un disparador que a su vez realiza un INSERT. Que dispara otro gatillo. Y así.
No, no depende del número de conjuntos de valores. Tampoco depende del número de bytes.
Existe un límite en cuanto a la profundidad de los paréntesis que pueden estar anidados y un límite a la extensión de la declaración total. Irónicamente, se hace referencia a ambos en thedailywtf.com. Sin embargo, los dos medios que mencioné anteriormente superan estos límites.
Llegará al límite de max_allowed_packet y
error: 1390 La instrucción preparada contiene demasiados marcadores de posición.
Puede colocar 65535 marcadores de posición en un sql, por lo que si tiene dos columnas en una fila, puede insertar 32767 filas en un sql.