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

  • SQL更新另一个字段的一个表的字段
  • mysql从另一个表中更新列的值
  • SQL根据ID匹配从一个表更新到另一个表
  • MySQL,用一个查询更新多个表
  • MySQL - 基于SELECT查询的UPDATE查询
  • MySQL:只有满足条件时才更新字段
  • 使用子查询更新postgres中的表格行
  • MYSQL - 在一个查询中更新具有不同值的多个行
  • 我如何(或可以)在多列上selectDISTINCT?
  • 如何插入包含撇号(单引号)的值?
  • PL / SQL中的UPDATE影响的行数