SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.08.2010 20:16:53

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

UPDATE сразу для нескольких разных строк

Помогите с инструкцией UPDATE.
Инструкция UPDATE позволяет обновить данные в одной строке или в нескольких:

Код:

UPDATE tablename SET pole1="message" WHERE id="1" and id="15";

Недостаток, что в этом запросе в каждой обновляемой ячейке устанавливается одно и тоже значение pole1="message". Мне нужно сделать 10 запросов UPDATE и в каждом обновить pole1 и задать для него уникальное значение. Так как в этих запросах pole1 должно иметь каждый раз разные значения, то для того и надо сделать 10 запросов.
Можно ли оптимизировать эти 10 запросов, соединив их в один?
Например, что то типа такого: UPDATE tablename SET (pole1="message1" WHERE id="2"), (pole2="another message"). Просто для примера написал, т.к. не знаю синтаксиса таких запросов.
То есть здесь хочется получить преимущество в быстроте, т.к. предполагаю, что один запрос к mysql будет произведён быстрее, чем 10 отдельных.

Отредактированно sito-corito (30.08.2010 20:20:56)

Неактивен

 

#2 30.08.2010 20:27:20

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: UPDATE сразу для нескольких разных строк

Как вариант можно вставить требуемые пары во временную таблицу, а затем сделат UPDATE с JOIN

Неактивен

 

#3 30.08.2010 21:55:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: UPDATE сразу для нескольких разных строк

Если на id есть уникальный индекс, то можно воспользоваться REPLACE.

Неактивен

 

#4 31.08.2010 17:17:21

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: UPDATE сразу для нескольких разных строк

Я так понимаю, что инструкцией UPDATE не предусмотрено множественное обновление ячеек с разными значениями одновременно.
Подскажите, как это можно сделать с помощью UPDATE и JOIN. Метод с помощью REPLACE тоже интересен, так как у меня id является уникальным ключом.
Короче задача такая. Есть таблица с двумя полями id и pole1. Необходимо за один запрос обновить данные в таблице. Там где id=1 поставить pole1="mes1", там где id=2 поставить pole1="mes2", там где id=3 поставить pole1="mes3". Вот такой запрос помогите, пожалуйста, составить.

Отредактированно sito-corito (31.08.2010 17:21:33)

Неактивен

 

#5 31.08.2010 20:20:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: UPDATE сразу для нескольких разных строк

Замените слово INSERT на слово REPLACE?

Неактивен

 

#6 31.08.2010 20:44:58

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: UPDATE сразу для нескольких разных строк

paulus написал:

Замените слово INSERT на слово REPLACE?

Все равно не понял, как с помощью REPLACE сделать такой запрос.

Неактивен

 

#7 31.08.2010 22:55:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: UPDATE сразу для нескольких разных строк

1. Напишите запрос, который бы вставлял строки с нужными данными.
2. Замените слово INSERT на слово REPLACE.

Неактивен

 

#8 01.09.2010 23:08:21

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: UPDATE сразу для нескольких разных строк

Теперь разобрался, спасибо.
А что вы посоветуете с вершины своего опыта: заменять 10-20 записей с помощью инструкции REPLACE или не заморачиваться и делать 10-20 отдельных обращений к базе с помощью инструкции UPDATE?

Неактивен

 

#9 01.09.2010 23:18:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: UPDATE сразу для нескольких разных строк

Честно? Не принципиально smile Скорее всего, на очень больших нагрузках
REPLACE будет работать чуть быстрее. Но надо мерять.

Неактивен

 

#10 04.04.2011 14:08:08

Igor
Участник
Зарегистрирован: 04.04.2011
Сообщений: 1

Re: UPDATE сразу для нескольких разных строк

А мне все равно не дошло что надо сделать.
Топикстартер, покажите Ваш запрос (готовый), если можно.

Неактивен

 

#11 14.01.2015 07:02:54

Osi322
Участник
Зарегистрирован: 04.07.2014
Сообщений: 24

Re: UPDATE сразу для нескольких разных строк

Если есть уникальный ключ, и столбцов в таблице много, пример:

create table test (id int, b int, c int, val int, primary key (id));

И нужно заменить только значение 'val' при определенных 'id', то нужно использовать запрос типа:
insert into test (  `id` ,  `val ` )  values(1,2),(3,15) on duplicate key update val =values(val);

Если использовать  REPLACE, то он все остальные столбцы в default-значения сделает.
PS:На заметку, если в этих запросах уникальны ключ(AUTO_INCREMENT-и его значение 5) , а в обновление значений values(20,2), то AUTO_INCREMENT уже будет с 20...

Отредактированно Osi322 (14.01.2015 07:09:34)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson