Kommt es auf die Anzahl der Wertesätze an? Hängt das von der Anzahl der Bytes in der INSERT-Anweisung ab?MySQL - Wie viele Zeilen kann ich in eine einzelne INSERT-Anweisung einfügen?
Antwort
Ich glaube, es gibt keine definierte Anzahl von Zeilen, die Sie pro INSERT einfügen können, aber es gibt möglicherweise eine Art von maximaler Größe für Abfragen im Allgemeinen.
Sie können eine unendliche Anzahl von Zeilen mit einer INSERT-Anweisung einfügen. Beispielsweise könnten Sie eine gespeicherte Prozedur ausführen, bei der eine Schleife tausendmal ausgeführt wird und jedes Mal eine INSERT-Abfrage ausgeführt wird.
Oder Ihr INSERT könnte einen Auslöser auslösen, der selbst einen INSERT ausführt. Welcher Auslöser löst einen anderen 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 Grenze dafür, wie tief die Klammern verschachtelt sein dürfen und wie lange Ihre Gesamtaussage dauern darf. Auf beide wird ironischerweise auf thedailywtf.com verwiesen. Beide oben genannten Mittel umgehen jedoch diese Grenzen.
Sie können unendlich viele Datensätze mit dem Muster INSERT ... SELECT
einfügen, vorausgesetzt, Sie haben diese Datensätze oder Teile davon in anderen Tabellen.
Aber wenn Sie die Werte mit INSERT ... VALUES
Muster hart codieren, dann gibt es eine Begrenzung, wie groß/lang Ihre Aussage ist: max_allowed_packet, die die Länge der SQL-Anweisungen vom Client an den Datenbankserver gesendet, und es betrifft alle Arten von Abfragen und nicht nur für die INSERT-Anweisung.
Abfrage ist durch max_allowed_packet
im Allgemeinen begrenzt.
Es wird 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 angeben in/etc/mysql/
sehen http://forums.mysql.com/read.php?20,161869, es mit Ihrem MySQL-Konfiguration in engen Zusammenhang steht: max_allowed_packet
, key_buffer_size
bulk_insert_buffer_size
.
Idealerweise Mysql unendliche Anzahl von Zeilen Erstellung in einzelnen Einsatz (gleichzeitig) erlauben, aber wenn ein
MySQL Client oder der -Server ein Paket größer als max_allowed_packet Bytes empfängt, gibt er ein Paket zu groß Fehler und schließt die Verbindung.
zu sehen, was der Standardwert für max_allowed_packet variabel ist, in MySQL in den folgenden Befehl auszuführen:
show variables like 'max_allowed_packet';
Standard-MySQL Installation hat einen Standardwert von 1048576 Bytes (1 MB). Dies kann erhöht werden, indem Sie für eine Sitzung oder Verbindung einen höheren Wert festlegen.
Dies setzt den Wert für alle 500MB (das ist, was GLOBAL bedeutet):
SET GLOBAL max_allowed_packet=524288000;
Ihre Änderung mit neuer Verbindung in neuen Terminals überprüfen:
show variables like 'max_allowed_packet';
Jetzt sollte es Arbeit ohne Fehler für unendliche Datensätze einfügen.
Dank500 MB ist nicht unendlich. Es ist viel größer als der Standardwert, aber immer noch nicht unendlich. – Carlos2W
Sie die max_allowed_packet Grenze und
Fehler betroffen: 1390 vorbereitete Anweisung enthält zu viele Platzhalter.
Sie können 65535 Platzhalter in einem sql.So setzen, wenn Sie zwei Spalten in einer Zeile haben, können Sie 32767 Zeilen in einem sql einfügen.
Ihre Beispiele sind für mehrere INSERT ausgeführt wird, und es zeigt nicht über mehrere Zeilen in Einfügen ** ** eine INSERT-Anweisung .. – Lukman
@Lukman: Eine INSERT-Abfrage kann in mehreren EINSÄTZE führen die Datenbank schlagen . Es kommt nur darauf an, wer was zählt. – Borealid
wahr, dass, aber Ihr 1. Beispiel zeigen über die Abfrage in einer Schleife mit jeder Schleife läuft eine INSERT-Anweisung laufen, und es sagt nichts über diese eine INSERT-Anweisung mehrere Zeilen einfügen. Es ist nur eine Frage der Betonung. – Lukman