Ich habe 1 viele Datensätze, die in eine Tabelle eingegeben werden müssen. Was ist der beste Weg, dies in einer Abfrage zu tun? Sollte ich nur eine Schleife erstellen und einen Datensatz pro Iteration einfügen? Oder gibt es einen besseren Weg?
Ich habe 1 viele Datensätze, die in eine Tabelle eingegeben werden müssen. Was ist der beste Weg, dies in einer Abfrage zu tun? Sollte ich nur eine Schleife erstellen und einen Datensatz pro Iteration einfügen? Oder gibt es einen besseren Weg?
Antworten:
Aus dem MySQL-Handbuch
INSERT-Anweisungen, die die VALUES-Syntax verwenden, können mehrere Zeilen einfügen. Fügen Sie dazu mehrere Listen mit Spaltenwerten hinzu, die jeweils in Klammern stehen und durch Kommas getrennt sind. Beispiel:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
Meistens arbeiten Sie nicht in einem MySQL-Client und sollten Batch-Einfügungen mithilfe der entsprechenden API zusammenfügen.
ZB in JDBC:
connection con.setAutoCommit(false);
PreparedStatement prepStmt = con.prepareStatement("UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
prepStmt.setString(1,mgrnum1);
prepStmt.setString(2,deptnum1);
prepStmt.addBatch();
prepStmt.setString(1,mgrnum2);
prepStmt.setString(2,deptnum2);
prepStmt.addBatch();
int [] numUpdates=prepStmt.executeBatch();
Insert into table(col1,col2) select col1,col2 from table_2;
Weitere Informationen finden Sie in der MySQL-Dokumentation zur INSERT-Anweisung
insert into select from
Leistung? ist es so schnell wie Bulk Insert?
Das Laden von Daten-Infile-Abfragen ist eine viel bessere Option, aber einige Server wie Godaddy beschränken diese Option auf Shared Hosting, sodass nur noch zwei Optionen übrig sind. Eine ist das Einfügen eines Datensatzes bei jeder Iteration oder Batch-Einfügung. Die Batch-Einfügung hat jedoch eine Beschränkung der Zeichen, wenn Ihre Abfrage diese überschreitet Anzahl der in MySQL festgelegten Zeichen, dann stürzt Ihre Abfrage ab. Ich schlage daher vor, Daten in Blöcken mit Batch-Einfügung einzufügen. Dadurch wird die Anzahl der mit database.best of glücklicher Jungs hergestellten Verbindungen minimiert
LOAD DATA LOCAL INFILE '/users/name/txt.file'
Mit MySQL können Sie mehrere Zeilen gleichzeitig einfügen. INSERT-Handbuch
INSERT
unterstützt dies nativ !