使用mysql中的限制更新多行?

hal*_*sed 28 mysql sql sql-update

    UPDATE messages set test_read =1 
        WHERE userid='xyz' 
        ORDER BY date_added DESC  
        LIMIT 5, 5 ;
Run Code Online (Sandbox Code Playgroud)

我试图使用此查询使用限制更新一组5行,但mysql显示错误..下面的一个正在工作

    UPDATE messages set test_read =1 
        WHERE userid='xyz' 
        ORDER BY date_added DESC  
        LIMIT 5 ;
Run Code Online (Sandbox Code Playgroud)

为什么第一个不工作?

Luk*_*ský 53

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

 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
 );
Run Code Online (Sandbox Code Playgroud)

  • 是的,MySQL不允许您更新它从中选择的表.额外的嵌套选择强制它将结果保存到临时表中. (19认同)
  • 当你问"你是否真的必须这样做"时,你是否暗示有一个更好的选择来更新记录,根据其中一个字段的顺序给出的排名? (2认同)

小智 5

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",则会定义行的顺序,并且可以以语句格式记录此类语句,而不会发出任何警告.