Antworten:
Sie können unendlich viele Datensätze mithilfe von INSERT ... SELECT
Mustern einfügen , sofern Sie diese Datensätze oder einen Teil davon in anderen Tabellen haben.
Wenn Sie die Werte jedoch mithilfe von INSERT ... VALUES
Mustern fest codieren , gibt es eine Begrenzung für die Größe / Länge Ihrer Anweisung: max_allowed_packet, wodurch die Länge der vom Client an den Datenbankserver gesendeten SQL-Anweisungen begrenzt wird und alle Arten von Abfragen betroffen sind und nicht nur für die INSERT-Anweisung.
Im Idealfall ermöglicht MySQL die Erstellung einer unendlichen Anzahl von Zeilen in einer einzelnen Einfügung (auf einmal), jedoch wenn a
Der MySQL-Client oder der mysqld-Server empfängt ein Paket, das größer als max_allowed_packet ist, gibt einen zu großen Paketfehler aus und schließt die Verbindung.
Führen Sie den folgenden Befehl in MySQL aus, um den Standardwert für die Variable max_allowed_packet anzuzeigen:
show variables like 'max_allowed_packet';
Die Standard-MySQL-Installation hat einen Standardwert von 1048576 Byte (1 MB). Dies kann erhöht werden, indem ein höherer Wert für eine Sitzung oder Verbindung festgelegt wird.
Dies setzt den Wert für alle auf 500 MB (das bedeutet GLOBAL):
SET GLOBAL max_allowed_packet=524288000;
Überprüfen Sie Ihre Änderung im neuen Terminal mit neuer Verbindung:
show variables like 'max_allowed_packet';
Jetzt sollte es ohne Fehler für das Einfügen von unendlichen Datensätzen funktionieren. Vielen Dank
strlen($query_with_questionmarks) < $max_alloweed_packet
?
Die Abfrage ist max_allowed_packet
im Allgemeinen begrenzt durch .
siehe http://forums.mysql.com/read.php?20,161869 , wird es im Zusammenhang mit Ihrem MySQL-Konfiguration: max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
.
Sie können mit einer INSERT-Anweisung unendlich viele Zeilen einfügen. Sie können beispielsweise eine gespeicherte Prozedur ausführen, bei der eine Schleife tausendmal ausgeführt wird, wenn eine INSERT-Abfrage ausgeführt wird.
Oder Ihr INSERT könnte einen Trigger auslösen, der selbst ein INSERT ausführt. Welches löst einen anderen Auslöser aus. Und so weiter.
Nein, es hängt nicht von der Anzahl der Wertesätze ab. Es hängt auch nicht von der Anzahl der Bytes ab.
Es gibt eine Begrenzung dafür, wie tief Ihre Klammern verschachtelt sein können, und eine Begrenzung dafür, wie lang Ihre Gesamtanweisung ist. Auf beide wird ironischerweise auf thedailywtf.com verwiesen. Beide oben genannten Mittel umgehen jedoch diese Grenzen.
Sie werden das max_allowed_packet Limit und erreichen
Fehler: 1390 Die vorbereitete Anweisung enthält zu viele Platzhalter.
Sie können 65535 Platzhalter in eine SQL einfügen. Wenn Sie also zwei Spalten in einer Zeile haben, können Sie 32767 Zeilen in eine SQL einfügen.