Я нашел эту страницу после выполнения некоторых упражнений с образцами и с тем же самым загадкой.
============== Я перешел от этого кода в качестве примера ===============
public static void main(String[] args) throws IOException {
Map wordMap = new HashMap();
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
countWord(wordMap, args[i]);
}
} else {
getWordFrequency(System.in, wordMap);
}
for (Iterator i = wordMap.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Map.Entry) i.next();
System.out.println(entry.getKey() + " :\t" + entry.getValue());
}
====================== Этот код ========================
public static void main(String[] args) throws IOException {
// replace with TreeMap to get them sorted by name
Map<String, Integer> wordMap = new HashMap<String, Integer>();
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
countWord(wordMap, args[i]);
}
} else {
getWordFrequency(System.in, wordMap);
}
for (Iterator<Entry<String, Integer>> i = wordMap.entrySet().iterator(); i.hasNext();) {
Entry<String, Integer> entry = i.next();
System.out.println(entry.getKey() + " :\t" + entry.getValue());
}
}
================ ================================================== =============
Это может быть безопаснее, но потребовалось 4 часа, чтобы одурачить философию ...
Если вы вставляете строки из какой-либо другой таблицы, вы можете использовать шаблон INSERT ... SELECT для вставки строк.
Однако, если вы вставляете значения используя шаблон INSERT ... VALUES
, у вас есть предел max_allowed_packet.
Также из документов: -
Чтобы оптимизировать скорость вставки, объедините множество небольших операций в одну большую операцию , В идеале вы делаете одно соединение, отправляете данные для многих новых строк одновременно и задерживаете все обновления индексов и проверку согласованности до самого конца.
blockquote>Пример: -
INSERT INTO `table1` (`column1`, `column2`) VALUES ("d1", "d2"), ("d1", "d2"), ("d1", "d2"), ("d1", "d2"), ("d1", "d2");
Что произойдет, если в пределах этого 20000 строк будут ошибки?
blockquote>Если во время ввода записей произошли ошибки, операция будет прервана.
http://dev.mysql.com/doc/refman/5.5/en/insert.html
Операторы INSERT, использующие синтаксис VALUES, могут вставлять несколько строк. Чтобы сделать это, включите несколько списков значений столбцов, каждый из которых заключен в круглые скобки и разделен запятыми.
blockquote>Пример:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Вы можете использовать код для генерации вставить
VALUES
на основе вашего источника данных.Ошибки: если в операторе
INSERT
(в том числе в любой из строк) есть ошибки, операция будет прервана.Генерация запроса - это будет основано на вашем источнике данных, например, если вы получаете данные из ассоциативного массива в PHP, вы сделаете что-то вроде этого:
$sql = "INSERT INTO tbl_name (a, b, c) VALUES "; foreach($dataset as $row) { $sql .= "(" + $row['a'] + ", " + $row['a'] + ", " + $row['a'] + ")"; // OR $sql .= "($row[a], $row[b], $row[c])"; }
Некоторые дополнительные ресурсы :
Оптимизация запросов MySQL - быстрые вставки с несколькими строками
пакетная вставка с SQL: insert into table (col ... coln) значения (col ... coln), (col ... coln) ... но длина SQL ограничена 1M по умолчанию, вы можете изменить max_allowed_packet для поддержки более крупной отдельной вставки