Зависит ли это от количества наборов значений? Зависит ли это от количества байтов в инструкции INSERT?
источник
Зависит ли это от количества наборов значений? Зависит ли это от количества байтов в инструкции INSERT?
Вы можете вставлять бесконечно большое количество записей с помощью INSERT ... SELECT
шаблона, если у вас есть эти записи или их часть в других таблицах.
Но если вы жестко кодируете значения с помощью INSERT ... VALUES
шаблона, то существует ограничение на размер / длину вашего оператора: max_allowed_packet, который ограничивает длину операторов SQL, отправляемых клиентом на сервер базы данных, и влияет на любые типы запросов. и не только для оператора INSERT.
В идеале Mysql позволяет создавать бесконечное количество строк за одну вставку (одновременно), но когда
Клиент MySQL или сервер mysqld получает пакет, размер которого превышает max_allowed_packet байтов, выдает ошибку «Пакет слишком большой» и закрывает соединение.
Чтобы просмотреть значение по умолчанию для переменной max_allowed_packet, выполните следующую команду в MySQL:
show variables like 'max_allowed_packet';
Стандартная установка MySQL имеет значение по умолчанию 1048576 байт (1 МБ). Его можно увеличить, установив более высокое значение для сеанса или соединения.
Это устанавливает значение 500 МБ для всех (это означает GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
проверьте изменения в новом терминале с новым подключением:
show variables like 'max_allowed_packet';
Теперь он должен работать без ошибок при вставке бесконечных записей. Благодарность
strlen($query_with_questionmarks) < $max_alloweed_packet
?Запрос
max_allowed_packet
в целом ограничен .источник
обратитесь к http://forums.mysql.com/read.php?20,161869 , это связано с конфигурацией вашей MySQL в:
max_allowed_packet
,bulk_insert_buffer_size
,key_buffer_size
.источник
Вы можете вставить бесконечное количество строк с помощью одного оператора INSERT. Например, вы можете выполнить хранимую процедуру, в которой цикл выполняется тысячу раз, каждый раз выполняя запрос INSERT.
Или ваш INSERT может активировать триггер, который сам выполняет INSERT. Что срабатывает еще один триггер. И так далее.
Нет, это не зависит от количества наборов значений. И не зависит от количества байтов.
Существует предел того, насколько глубоко могут быть вложены ваши скобки, и предел длины вашего общего утверждения. По иронии судьбы, оба они упоминаются на thedailywtf.com. Однако оба упомянутых выше средства обходят эти ограничения.
источник
Вы достигнете предела max_allowed_packet и
ошибка: 1390 Подготовленный оператор содержит слишком много заполнителей.
Вы можете поместить 65535 заполнителей в один sql, поэтому, если у вас есть два столбца в одной строке, вы можете вставить 32767 строк в один sql.
Импорт более 50K записей в MySQL дает общую ошибку: 1390 Подготовленный оператор содержит слишком много заполнителей
источник
Я считаю, что нет определенного количества строк, которые вы ограничены вставкой за INSERT, но может быть какой-то максимальный размер для запросов в целом.
источник
Ограничено max_allowed_packet.
Вы можете указать с помощью:
mysqld --max_allowed_packet=32M
По умолчанию 16M.Вы также можете указать my.cnf в / etc / mysql /
источник