Массовая вставка и обновление в mysql

Я пытаюсь сделать массовую вставку в свою таблицу, но она должна учитывать повторяющиеся значения. Если есть дубликаты, он должен обновить строки, а не обновлять их.

Моя таблица: пользователь (идентификатор, имя, URL-адрес), где идентификатор - ПК

Я пробовал это:

INSERT INTO `user` (`id`, `name`, `url`) 
    VALUES 
    ('7656', 'Tom', 'http://user.com/7656'),
    ('1234', 'Jean', 'http://user.com/1234'), 
    ('8596', 'Pierre', 'http://user.com/8596'),         
    ('2035', 'Somon', 'http://user.com/2035'), 
    ('3685', 'Lola', 'http://user.com/3685')
    ON DUPLICATE KEY UPDATE name=VALUES(name), url=VALUES(url)

Предположим, что все 5 записей, которые я пытаюсь вставить, уже существуют в моей таблице только с URL-адресом для обновления, как мне это сделать?

Можно ли обновлять строки с такой массовой вставкой?


person user2707590    schedule 25.09.2015    source источник
comment
Почему бы не попробовать и посмотреть, что получится?   -  person Pekka    schedule 25.09.2015


Ответы (1)


INSERT INTO `table` (a, b, c) 
VALUES (?, ?, ?), 
VALUES (?, ?, ?), 
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES (b), c = VALUES(c)

вам нужно каждый раз устанавливать ЗНАЧЕНИЯ.

Кроме того, то, как вы строите запрос, также в порядке, но у вас есть ',' дополнительное значение в первом значении ('7656', 'Tom', 'http://user.com/7656' , ),

person Puya Sarmidani    schedule 25.09.2015
comment
Это работает, но по какой-то причине я обновляю 5 записей только с 1 столбцом, который изменяется, и он сообщает мне, что затронуты 10 строк. Есть идеи? - person user2707590; 25.09.2015
comment
Можете ли вы отредактировать свой вопрос выше с новым запросом. Мне нужно посмотреть, как он строится сейчас - person Puya Sarmidani; 25.09.2015
comment
Это почти то же самое, я просто заменил И на в части обновления. см. выше - person user2707590; 25.09.2015
comment
У вас есть ' , ' дополнительное значение в первом значении ('7656', 'Том', 'user.com/7656' , ), - person Puya Sarmidani; 25.09.2015
comment
да, это опечатка, ее нужно удалить оттуда.. но это не то, что влияет на 10 строк - person user2707590; 25.09.2015
comment
Это потому, что вы обновляете дублирующийся ключ. Итак, у вас есть 5 записей, но вы обновляете 2 значения (имя и URL-адрес), поэтому будут обновлены 5 имен и 5 записей URL-адресов. - person Puya Sarmidani; 25.09.2015
comment
При ON DUPLICATE KEY UPDATE значение затронутых строк для каждой строки равно 1, если строка вставляется как новая строка, и 2, если обновляется существующая строка. - person Puya Sarmidani; 25.09.2015