У мене є 1-багато записів, які потрібно внести до таблиці. Який найкращий спосіб зробити це у запиті? Чи варто просто зробити цикл і вставити один запис за ітерацію? Або є кращий спосіб?
У мене є 1-багато записів, які потрібно внести до таблиці. Який найкращий спосіб зробити це у запиті? Чи варто просто зробити цикл і вставити один запис за ітерацію? Або є кращий спосіб?
Відповіді:
Вкладиші INSERT, які використовують синтаксис VALUES, можуть вставляти кілька рядків. Для цього включіть декілька списків значень стовпців, кожен укладений у круглі дужки та розділений комами. Приклад:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
Більшу частину часу ви не працюєте в клієнті MySQL і вам слід створювати пакетні вставки разом, використовуючи відповідний API.
Напр. У 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;
Будь ласка, зверніться до документації MySQL щодо заяви INSERT
insert into select from
продуктивності? це так швидко, як об'ємна вставка?
Запит запиту на завантаження даних є набагато кращим варіантом, але деякі сервери, такі як godaddy, обмежують цю опцію на спільному хостингу, тому залишається лише два варіанти, тоді один - вставка запису на кожну ітерацію або пакетну вставку, але пакетна вставка має обмеження символів, якщо ваш запит перевищує це кількість символів, встановлених у mysql, тоді ваш запит завершиться, тому я пропоную вставляти дані в шматки з пакетною вставкою, це зведе до мінімуму кількість з'єднань, встановлених з database.best удачі хлопців
LOAD DATA LOCAL INFILE '/users/name/txt.file'
mysql дозволяє вставити декілька рядків одночасно INSERT керівництво
INSERT
підтримує це споконвічно !