58
задан 8 December 2011 в 11:06

2 ответа

В дополнение к вложенному подходу выше, можно выполнить приложение LIMIT использование JOIN на той же таблице:

UPDATE `table_name`
INNER JOIN (SELECT `id` from `table_name` order by `id` limit 0,100) as t2 using (`id`)
SET `name` = 'test'

, По моему опыту, mysql оптимизатор запросов более доволен этой структурой.

1
ответ дан 1 November 2019 в 13:31

Поскольку люди получают это сообщение поисковым "предельным MySQL обновления", старающимся избегать выключения safe update mode при направлении update с синтаксисом нескольких-таблиц.

С тех пор официальное состояние документа

Для синтаксиса нескольких-таблиц, ОБНОВЛЕНИЕ обновляет строки в каждой таблице, названной в table_references, которые удовлетворяют условия. В этом случае ORDER BY и ПРЕДЕЛ не могут использоваться.

https://stackoverflow.com/a/28316067/1278112
я думаю, что этот ответ довольно полезен. Это дает пример

клиентский код страны НАБОРА ОБНОВЛЕНИЯ = 'США' ГДЕ страна = 'США'; - который дает ошибку, Вы просто пишете:

клиенты ОБНОВЛЕНИЯ УСТАНАВЛИВАЮТ код страны = 'США' ГДЕ (страна = 'США' И customerNumber <> 0); - поскольку customerNumber является первичным ключом, Вы не получали ошибки 1175 больше.

, Что я хочу, но повысил бы код ошибки 1175.

UPDATE table1 t1
        INNER JOIN
    table2 t2 ON t1.name = t2.name 
SET 
    t1.column = t2.column
WHERE
    t1.name = t2.name;

рабочий выпуск

UPDATE table1 t1
        INNER JOIN
    table2 t2 ON t1.name = t2.name 
SET 
    t1.column = t2.column
WHERE
    (t1.name = t2.name and t1.prime_key !=0);

, Который действительно прост и изящен. Так как исходный ответ не привлекает слишком много внимания (голоса), я отправляю больше объяснения. Надежда это может помочь другим.

0
ответ дан 1 November 2019 в 13:31

Другие вопросы по тегам:

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