Обновить несколько строк, используя ограничение в mysql?
UPDATE messages set test_read =1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5, 5 ;
Я пытаюсь использовать этот запрос для обновления набора из 5 строк с использованием ограничения, но mysql показывает ошибку. Ниже приведена работа
UPDATE messages set test_read =1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5 ;
почему первый не работает?
Ответы
Ответ 1
Если вы действительно должны это сделать, вы можете использовать что-то вроде этого:
UPDATE messages SET test_read=1
WHERE id IN (
SELECT id FROM (
SELECT id FROM messages
ORDER BY date_added DESC
LIMIT 5, 5
) tmp
);
Ответ 2
http://bugs.mysql.com/bug.php?id=42415
В документации указано, что любой оператор UPDATE с предложением LIMIT считается небезопасным, поскольку порядок затронутых строк не является определены: http://dev.mysql.com/doc/refman/5.1/en/replication-features-limit.html
Однако, если используется "ORDER BY PK", порядок строк определяется и такой оператор может быть зарегистрирован в формате инструкции без каких-либо предупреждение.