Подтвердить что ты не робот

Обновить несколько строк, используя ограничение в 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 ;

почему первый не работает?

4b9b3361

Ответ 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", порядок строк определяется и такой оператор может быть зарегистрирован в формате инструкции без каких-либо предупреждение.