Чи залежить це від кількості наборів значень? Чи залежить це від кількості байтів у інструкції INSERT?
Відповіді:
Ви можете вставити нескінченно велику кількість записів, використовуючи INSERT ... SELECT
шаблон, за умови, що ці записи або їх частина є в інших таблицях.
Але якщо ви жорстко кодуєте значення за допомогою INSERT ... VALUES
шаблону, тоді існує обмеження на те, наскільки великим / довгим є ваш оператор: max_allowed_packet, який обмежує довжину операторів SQL, що надсилаються клієнтом на сервер бази даних, і це впливає на будь-які типи запитів і не тільки для оператора INSERT.
В ідеалі Mysql дозволяє створювати нескінченну кількість рядків в одній вставці (відразу), але коли a
Клієнт 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. Однак обидва засоби, про які я згадав вище, обходять ці межі.
Ви досягнете максимального дозволеного_пакета та
помилка: 1390 Підготовлене твердження містить забагато заповнювачів.
Ви можете помістити 65535 заповнювачів в один sql, тому, якщо у вас є два стовпці в одному рядку, ви можете вставити 32767 рядків в один sql.