2010-08-21 3 views

Antwort

0

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.

4

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.

+0

Ihre Beispiele sind für mehrere INSERT ausgeführt wird, und es zeigt nicht über mehrere Zeilen in Einfügen ** ** eine INSERT-Anweisung .. – Lukman

+0

@Lukman: Eine INSERT-Abfrage kann in mehreren EINSÄTZE führen die Datenbank schlagen . Es kommt nur darauf an, wer was zählt. – Borealid

+2

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

74

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.

19

Abfrage ist durch max_allowed_packet im Allgemeinen begrenzt.

1

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/

20

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.

Dank
+4

500 MB ist nicht unendlich. Es ist viel größer als der Standardwert, aber immer noch nicht unendlich. – Carlos2W