bigton
@bigton
Web-программист

Как сделать множественный UPDATE?

Всем привет!

Я знаю как сделать множественный UPDATE
INSERT INTO table (a, b, c) VALUES (1, 2, 3), (4, 5, 6) 
ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c)

Как сделать этот запрос более универсальным? Например,
INSERT INTO table (a, b, c) VALUES (1, 2, 3), (4, 5, 6) 
ON DUPLICATE KEY UPDATE ALL

Или может быть лучше написать и использовать какую ни будь хранимую процедуру?

Как вы решаете подобную задачу? Спасибо.
  • Вопрос задан
  • 1840 просмотров
Пригласить эксперта
Ответы на вопрос 4
suguby
@suguby
программист, python, django, mysql, git, hg, linux
никак dev.mysql.com/doc/refman/5.6/en/insert-on-duplicat...
и правильно предостерегают - ODKU чреват разными малопонятными аффектами, habrahabr.ru/post/156489 к примеру
Ответ написан
Комментировать
а чем вас не устраивает первый вариант? он вполне универсален, делает вставку (insert), если натыкается на аналогичную строку (срабатывает ограничение на уникальность), то выполняет update, в чем проблема?
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
"множественные" запросы - очередной фетиш неграмотных похапистов.
Если приходится апдейтить до десятка записей, то это легко делается отдельными запросами.
Если больше - значит, надо пересматривать подход в целом.

ON DUPLICATE KEY - вполне определенный тип запроса, и использование его для мультиапдейта - хак, чреватый непредсказуемым поведением (например, возвращением в строй уже удаленных записей).
Но похапе программисты, однажды узнав о таком "лайфхаке", начинают страшно гордиться таким сокровенным знанием" и пихать его по делу и без дела.
Ответ написан
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
Если используете параметризованные запросы то ничего не мешает написать свой класс.

НО если вы массово используете ODKU лучше подумайте что у вас не так в архитектуре, такого быть не должно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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