В дополнение к вложенному подходу выше, можно выполнить приложение 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 оптимизатор запросов более доволен этой структурой.
Поскольку люди получают это сообщение поисковым "предельным 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);
, Который действительно прост и изящен. Так как исходный ответ не привлекает слишком много внимания (голоса), я отправляю больше объяснения. Надежда это может помочь другим.