Mam od 1 do wielu rekordów, które należy wprowadzić do tabeli. Jaki jest najlepszy sposób zrobienia tego w zapytaniu? Czy powinienem po prostu zrobić pętlę i wstawić jeden rekord na iterację? Czy jest jakiś lepszy sposób?
Mam od 1 do wielu rekordów, które należy wprowadzić do tabeli. Jaki jest najlepszy sposób zrobienia tego w zapytaniu? Czy powinienem po prostu zrobić pętlę i wstawić jeden rekord na iterację? Czy jest jakiś lepszy sposób?
Odpowiedzi:
Instrukcje INSERT używające składni VALUES mogą wstawiać wiele wierszy. Aby to zrobić, uwzględnij wiele list wartości kolumn, każdą umieszczoną w nawiasach i oddzieloną przecinkami. Przykład:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
W większości przypadków nie pracujesz w kliencie MySQL i powinieneś zbiorczo wstawiać wstawki za pomocą odpowiedniego interfejsu API.
Np. W 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;
Proszę zapoznać się z dokumentacją MySQL dotyczącą instrukcji INSERT
insert into select from
wydajnością? czy jest tak szybka jak wkład zbiorczy?
Zapytanie o załadowanie danych jest znacznie lepszą opcją, ale niektóre serwery, takie jak GoDaddy, ograniczają tę opcję do hostingu współdzielonego, więc pozostały tylko dwie opcje, a następnie jedna to wstawianie rekordu przy każdej iteracji lub wstawianiu wsadowym, ale wstawianie wsadowe ma ograniczenie znaków, jeśli zapytanie przekracza tę wartość liczba znaków ustawionych w mysql to twoje zapytanie ulegnie awarii, więc sugeruję wstawianie danych w kawałkach za pomocą wstawiania wsadowego, co zminimalizuje liczbę połączeń nawiązanych z bazą danych. powodzenia chłopaki
LOAD DATA LOCAL INFILE '/users/name/txt.file'
mysql pozwala na wstawienie wielu wierszy na raz INSERT manual
INSERT
obsługuje to natywnie !