MySQL - сколько строк можно вставить в один оператор INSERT?

Зависит ли это от количества наборов значений? Это зависит от количества байтов в инструкции INSERT?

Ответ 1

Вы можете вставлять бесконечно большое количество записей, используя шаблон INSERT ... SELECT, если у вас есть эти записи или часть других таблиц.

Но если вы жестко кодируете значения с использованием шаблона INSERT ... VALUES, тогда существует ограничение на то, насколько велика/длинна ваша инструкция: max_allowed_packet, который ограничивает длину операторов SQL, отправленных клиентом на сервер базы данных, и затрагивает любые типы запросов, а не только для оператора INSERT.

Ответ 2

В общем случае запрос ограничен max_allowed_packet.

Ответ 3

В идеале 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';

Теперь он должен работать без ошибок для вставки бесконечных записей. Благодаря

Ответ 4

обратитесь к http://forums.mysql.com/read.php?20,161869, это связано с вашей конфигурацией mysql: max_allowed_packet, bulk_insert_buffer_size, key_buffer_size.

Ответ 5

Вы можете вставить бесконечное количество строк с одним оператором INSERT. Например, вы можете выполнить хранимую процедуру, которая имеет цикл, выполняемый тысячу раз, каждый раз при выполнении запроса INSERT.

Или ваш INSERT может отключить триггер, который сам выполняет INSERT. Который запускает другой триггер. И так далее.

Нет, это не зависит от количества наборов значений. Он также не зависит от количества байтов.

Существует ограничение на то, насколько глубоко вложены ваши круглые скобки, и ограничение того, как долго ваш общий оператор. Обе эти ссылки, по иронии судьбы, упоминаются на thedailywtf.com. Однако оба указанных выше средства обойдутся в этих пределах.

Ответ 6

Он ограничен max_allowed_packet.
Вы можете указать, используя:   mysqld --max_allowed_packet=32M Это по умолчанию 16M.
Вы также можете указать в my.cnf в/etc/mysql/

Ответ 7

Вы достигнете предела max_allowed_packet и

error: 1390 Подготовленный оператор содержит слишком много заполнителей.

Вы можете поместить 65535 заполнителей в один sql.So, если у вас есть два столбца в одной строке, вы можете вставить 32767 строк в один sql.

Импорт записей 50K + в MySQL Дает общую ошибку: 1390 Подготовленный оператор содержит слишком много заполнителей

Ответ 8

Я считаю, что нет определенного количества строк, которые вы ограничены вставкой для INSERT, но в целом для запросов может быть какой-то максимальный размер.