【问题标题】:update max id_post only from table in job crons, mysql仅从作业 cron、mysql 中的表更新 max id _post
【发布时间】:2020-09-04 19:46:22
【问题描述】:

我有一张桌子posts

 id_post   |  status
  3434        0
  5655        3
  5935        5
  9867        1 
  9990        3 
  10975       5
  11234       3

我正在运行一个作业 cron,每四个小时更新一次状态为 3 的帖子,但只能一一更新。

所以,

第一次,将帖子5655状态从3更新为1

第二次,将帖子9990状态从3更新为1

第三次,将帖子11234状态从3更新为1

我正在考虑使用,但我不确定,因为我无法在本地测试它。 (cron 作业在服务器中使用另一个 sql 脚本进行了测试并且运行良好)

我正在考虑使用,但我不确定

UPDATE posts
SET    status=1
WHERE  status = 3
ORDER BY id_post ASC
LIMIT 1

我只需要确认一下这条 sql 语句是否可以正常工作,我在服务器上的 cron 作业中运行它。谢谢。

【问题讨论】:

    标签: mysql sql cron sql-update sql-order-by


    【解决方案1】:

    是的,您的查询将在 MySQL 中按预期工作。与其他数据库不同,MySQL 在update 语句中支持order by 和limit。他们的行为是described in the documentation:

    WHERE 子句(如果给定)指定确定要更新哪些行的条件。如果没有 WHERE 子句,所有行都会更新。如果指定了ORDER BY 子句,则按指定的顺序更新行。 LIMIT 子句对可以更新的行数进行了限制。

    因此,您的查询将选择带有status = 3 的“第一”行(由排序列id 定义),并将status 更改为1。下次执行时,会选择并更新带有status = 3 的“下一个”行。

    但是请注意,如果在随后的查询执行之间修改了表的内容(也就是说,如果插入了带有较早 id 的行,或者使用 status = 1 更改了行),您可能没有得到您期望的确切行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2018-04-18
      • 2011-09-14
      • 1970-01-01
      • 2011-09-14
      • 2019-01-25
      相关资源
      最近更新 更多