Depende do número de conjuntos de valores? Depende do número de bytes na instrução INSERT?
Respostas:
Você pode inserir um número infinitamente grande de registros usando o INSERT ... SELECT
padrão, desde que você tenha esses registros, ou parte deles, em outras tabelas.
Mas se você estiver codificando os valores usando o INSERT ... VALUES
padrão, então há um limite para o tamanho / tamanho de sua instrução: max_allowed_packet que limita o comprimento das instruções SQL enviadas pelo cliente para o servidor de banco de dados e afeta qualquer tipo de consulta e não apenas para a instrução INSERT.
Idealmente, o Mysql permite a criação de um número infinito de linhas em uma única inserção (de uma vez), mas quando um
O cliente MySQL ou o servidor mysqld recebe um pacote maior que max_allowed_packet bytes, ele emite um erro de pacote muito grande e fecha a conexão.
Para ver qual é o valor padrão da variável max_allowed_packet, execute o seguinte comando no MySQL:
show variables like 'max_allowed_packet';
A instalação padrão do MySQL tem um valor padrão de 1048576 bytes (1 MB). Isso pode ser aumentado definindo-o para um valor mais alto para uma sessão ou conexão.
Isso define o valor para 500 MB para todos (é isso que significa GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
verifique sua mudança no novo terminal com nova conexão:
show variables like 'max_allowed_packet';
Agora ele deve funcionar sem nenhum erro para inserir registros infinitos. obrigado
strlen($query_with_questionmarks) < $max_alloweed_packet
?
A consulta é limitada por max_allowed_packet
em geral.
referem-se a http://forums.mysql.com/read.php?20,161869 , que está relacionado com a configuração do mysql: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Você atingirá o limite max_allowed_packet e
erro: 1390 A instrução preparada contém muitos espaços reservados.
Você pode colocar 65535 espaços reservados em um sql. Portanto, se você tiver duas colunas em uma linha, poderá inserir 32.767 linhas em um sql.
Você pode inserir um número infinito de linhas com uma instrução INSERT. Por exemplo, você pode executar um procedimento armazenado que tem um loop executado mil vezes, cada vez executando uma consulta INSERT.
Ou seu INSERT pode disparar um gatilho que executa um INSERT. O que aciona outro gatilho. E assim por diante.
Não, não depende do número de conjuntos de valores. Nem depende do número de bytes.
Há um limite para o quão profundamente aninhados seus parênteses podem ser e um limite para o tamanho de sua declaração total. Ambos são referenciados, ironicamente, em thedailywtf.com. No entanto, ambos os meios que mencionei acima contornam esses limites.