Ho 1-numero di record che devono essere inseriti in una tabella. Qual è il modo migliore per farlo in una query? Devo solo fare un ciclo e inserire un record per iterazione? O c'è un modo migliore?
Ho 1-numero di record che devono essere inseriti in una tabella. Qual è il modo migliore per farlo in una query? Devo solo fare un ciclo e inserire un record per iterazione? O c'è un modo migliore?
Risposte:
Dal manuale di MySQL
Le istruzioni INSERT che utilizzano la sintassi VALUES possono inserire più righe. Per fare ciò, includere più elenchi di valori di colonna, ciascuno racchiuso tra parentesi e separato da virgole. Esempio:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
Il più delle volte, non stai lavorando in un client MySQL e dovresti inserire in batch inserimenti usando l'API appropriata.
Ad esempio 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;
Fare riferimento alla documentazione MySQL sull'istruzione INSERT
insert into select from
prestazioni? è veloce come l'inserto di massa?
Carica query di data infile è un'opzione molto migliore ma alcuni server come godaddy limitano questa opzione sull'hosting condiviso, quindi, rimangono solo due opzioni quindi una è inserire record su ogni iterazione o inserimento batch, ma l'inserimento batch ha il suo limite di caratteri se la tua query supera questa numero di caratteri impostati in mysql, quindi la tua query si arresterà in modo anomalo, quindi ti suggerisco di inserire i dati in blocchi con l'inserimento batch, questo ridurrà al minimo il numero di connessioni stabilite con database. buona fortuna ragazzi
LOAD DATA LOCAL INFILE '/users/name/txt.file'
mysql ti permette di inserire più righe contemporaneamente INSERT manuale
INSERT
supporta questo nativamente !