Kommt es auf die Anzahl der Wertesätze an? Kommt es auf die Anzahl der Bytes in der INSERT-Anweisung an?
quelle
Kommt es auf die Anzahl der Wertesätze an? Kommt es auf die Anzahl der Bytes in der INSERT-Anweisung an?
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 .quelle
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
.quelle
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.
quelle
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.
Der Import von über 50.000 Datensätzen in MySQL führt zu einem allgemeinen Fehler: 1390 Die vorbereitete Anweisung enthält zu viele Platzhalter
quelle
Ich glaube, es gibt keine definierte Anzahl von Zeilen, die Sie pro INSERT einfügen dürfen, aber es kann eine Art maximale Größe für Abfragen im Allgemeinen geben.
quelle
Es ist durch max_allowed_packet begrenzt.
Sie können Folgendes angeben:
mysqld --max_allowed_packet=32M
Es ist standardmäßig 16M.Sie können auch in my.cnf in / etc / mysql / angeben
quelle