Зависит ли это от количества наборов значений? Зависит ли это от количества байтов в инструкции 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.