Apakah itu tergantung pada jumlah kumpulan nilai? Apakah itu tergantung pada jumlah byte dalam pernyataan INSERT?
Jawaban:
Anda dapat menyisipkan rekaman dalam jumlah tak terhingga menggunakan INSERT ... SELECT
pola, asalkan Anda memiliki rekaman tersebut, atau bagiannya, di tabel lain.
Tetapi jika Anda melakukan hard-coding nilai menggunakan INSERT ... VALUES
pola, maka ada batasan seberapa besar / panjang pernyataan Anda: max_allowed_packet yang membatasi panjang pernyataan SQL yang dikirim oleh klien ke server database, dan itu memengaruhi semua jenis kueri dan tidak hanya untuk pernyataan INSERT.
Idealnya, Mysql memungkinkan pembuatan baris dalam jumlah tak terbatas dalam satu sisipan (sekaligus) tetapi ketika a
Klien MySQL atau server mysqld menerima paket yang lebih besar dari byte max_allowed_packet, mengeluarkan paket kesalahan yang terlalu besar dan menutup koneksi.
Untuk melihat nilai default untuk variabel max_allowed_packet, jalankan perintah berikut di MySQL:
show variables like 'max_allowed_packet';
Instalasi MySQL standar memiliki nilai default 1048576 byte (1MB). Ini dapat ditingkatkan dengan mengaturnya ke nilai yang lebih tinggi untuk sesi atau koneksi.
Ini menetapkan nilainya menjadi 500MB untuk semua orang (itulah arti GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
periksa perubahan Anda di terminal baru dengan koneksi baru:
show variables like 'max_allowed_packet';
Sekarang seharusnya berfungsi tanpa kesalahan untuk memasukkan catatan tak terbatas. Terima kasih
strlen($query_with_questionmarks) < $max_alloweed_packet
?
Kueri secara max_allowed_packet
umum dibatasi .
mengacu http://forums.mysql.com/read.php?20,161869 , itu terkait dengan konfigurasi mysql Anda: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Anda dapat menyisipkan baris dalam jumlah tak terbatas dengan satu pernyataan INSERT. Misalnya, Anda dapat menjalankan prosedur tersimpan yang memiliki loop yang dieksekusi ribuan kali, setiap kali menjalankan kueri INSERT.
Atau INSERT Anda bisa memicu pemicu yang melakukan INSERT sendiri. Yang memicu pemicu lain. Dan seterusnya.
Tidak, ini tidak bergantung pada jumlah kumpulan nilai. Juga tidak tergantung pada jumlah byte.
Ada batasan seberapa dalam tanda kurung Anda, dan berapa panjang total pernyataan Anda. Ironisnya, keduanya direferensikan di thedailywtf.com. Namun, kedua cara yang saya sebutkan di atas mengatasi batasan ini.
Anda akan mencapai batas max_allowed_packet dan
kesalahan: 1390 Pernyataan Disiapkan berisi tempat penampung terlalu banyak.
Anda dapat meletakkan 65535 placeholder dalam satu sql. Jadi jika Anda memiliki dua kolom dalam satu baris, Anda dapat memasukkan 32767 baris dalam satu sql.