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

为什么第一个不工作?

2 Solutions collect form web for “在MySQL中使用限制更新多行?”

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

  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此语句,而不会有任何警告。

  • 如何插入包含撇号(单引号)的值?
  • 基于另一个表值的MySQL更新表
  • MySQL,用一个查询更新多个表
  • MySQL中的多个更新
  • SQL更新为其join的值的SUM
  • 使用子查询更新postgres中的表格行
  • 如何在SQLite上连接表时进行更新?
  • PL / SQL中的UPDATE影响的行数
  • MySQL错误代码:1175在MySQL Workbench中更新
  • Oracle SQL:使用另一个表中的数据更新表
  • 我如何(或可以)在多列上selectDISTINCT?