在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 ; 

为什么第一个不工作?

如果你真的必须这样做,你可以使用这样的东西:

  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 ); 

http://bugs.mysql.com/bug.php?id=42415

该文档指出,任何具有LIMIT子句的UPDATE语句都被认为是不安全的,因为受影响的行的顺序没有定义: http : //dev.mysql.com/doc/refman/5.1/en/replication-features-limit.html

但是,如果使用“ORDER BY PK”,则会定义行的顺序,并且可以以声明格式logging此语句,而不会有任何警告。