как вставить несколько значений в один столбец [дубликат]

Я нашел эту страницу после выполнения некоторых упражнений с образцами и с тем же самым загадкой.

============== Я перешел от этого кода в качестве примера ===============

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 часа, чтобы одурачить философию ...

6
задан josliber 4 March 2014 в 08:07
поделиться

3 ответа

Если вы вставляете строки из какой-либо другой таблицы, вы можете использовать шаблон INSERT ... SELECT для вставки строк.

Однако, если вы вставляете значения используя шаблон INSERT ... VALUES, у вас есть предел max_allowed_packet.

Также из документов: -

Чтобы оптимизировать скорость вставки, объедините множество небольших операций в одну большую операцию , В идеале вы делаете одно соединение, отправляете данные для многих новых строк одновременно и задерживаете все обновления индексов и проверку согласованности до самого конца.

Пример: -

INSERT INTO `table1` (`column1`, `column2`) VALUES ("d1", "d2"),
                                                 ("d1", "d2"),
                                                 ("d1", "d2"),
                                                 ("d1", "d2"),
                                                 ("d1", "d2");

Что произойдет, если в пределах этого 20000 строк будут ошибки?

Если во время ввода записей произошли ошибки, операция будет прервана.

7
ответ дан Rahul Tripathi 21 August 2018 в 09:28
поделиться
  • 1
    Вся вставка будет прервана? или с точки зрения, что это не удается? – Kamrul Khan 4 March 2014 в 11:54
  • 2
    @ user3360140: - С точки зрения не получается! – Rahul Tripathi 4 March 2014 в 11:57
  • 3
    В таком случае, как лучше всего узнать, сколько строк было вставлено, если была ошибка? – Kamrul Khan 5 March 2014 в 11:41
  • 4
    @ user3360140, поскольку один из вариантов - проверка журналов в случае ошибок – jbakirov 19 July 2015 в 20:58

http://dev.mysql.com/doc/refman/5.5/en/insert.html

Операторы INSERT, использующие синтаксис VALUES, могут вставлять несколько строк. Чтобы сделать это, включите несколько списков значений столбцов, каждый из которых заключен в круглые скобки и разделен запятыми.

Пример:

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 - быстрые вставки с несколькими строками

Самый быстрый способ вставить записи 100K

3
ответ дан Joshua Kissoon 21 August 2018 в 09:28
поделиться

пакетная вставка с SQL: insert into table (col ... coln) значения (col ... coln), (col ... coln) ... но длина SQL ограничена 1M по умолчанию, вы можете изменить max_allowed_packet для поддержки более крупной отдельной вставки

1
ответ дан 马元生 21 August 2018 в 09:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: