【问题标题】:mysql + update top nmysql + 更新前 n
【发布时间】:2010-10-18 02:29:36
【问题描述】:

我有一个这样的查询:

update  table
set     status = 1
where   status = 2;     

但我只想对前 400 名执行此操作。我尝试添加“限制 0, 400”(就像我在查询中那样),但这没有用。我做了一些搜索,mysql似乎不像sql server那样支持TOP(n)命令。

知道我该怎么做吗?

编辑:为了将来参考,我使用以下样式进行选择,效果很好:

select  * 
from    table
where   ... limit 0, 400;

但在更新中,无论出于何种原因,它都不能与“0”一起使用。我会考虑这种不一致和模棱两可的行为,但是好吧。

【问题讨论】:

    标签: mysql sql sql-update


    【解决方案1】:
    UPDATE  table
    SET     status = 1
    WHERE   status = 2
    ORDER BY id
    LIMIT 400
    

    签入MySQL 5.2.0-falcon-alpha-community-nt-log,确认工作。

    在您的情况下,LIMIT 0, 400 中的 0 不起作用。

    您不能在UPDATELIMIT 中使用下限。

    【讨论】:

      【解决方案2】:

      试试这个:

      update  table
      set     status = 1
      where   status = 2
      LIMIT 400
      

      您也可以通过子句下订单

      update  table
      set     status = 1
      where   status = 2
      ORDER BY id
      LIMIT 400
      

      【讨论】:

      • 这会更新每一行,因为 2 后面有分号。否?
      • 我认为分号只是错误地从原始查询中粘贴的,在这里没有意义。
      【解决方案3】:

      为了将来参考,别忘了关闭安全模式

      SET SQL_SAFE_UPDATES = 0;
      update YOUR_DATABASE_NAME.TABLE_NAME
      set COLUMN_NAM = 0
      limit 400;
      SET SQL_SAFE_UPDATES = 1;
      

      例如,MySQL 不允许您更新记录以防止您在安全模式下出错,因此您必须禁用它才能更新您的记录。

      另一种语法非常先进。 limit 会将返回的记录数量限制为您选择的数量。

      【讨论】:

      • 请在您的答案中添加一些解释,以便其他人可以从中学习
      猜你喜欢
      • 1970-01-01
      • 2012-10-22
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多