>我有一个表格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中按预期工作。与其他数据库不同,MySQL支持update
语句中的order by
和limit
。它们的行为在文档中进行了描述:
WHERE
子句(如果给定(指定标识要更新的行的条件。如果没有WHERE
子句,则更新所有行。如果指定了ORDER BY
子句,则按指定的顺序更新行。LIMIT
子句对可以更新的行数施加限制。
因此,您的查询将按原样选择带有status = 3
的"第一"行(由排序列id
定义(,并将status
更改为1
。下次执行时,将选取并更新带有status = 3
的"下一个"行。
但是请注意,如果在随后的查询执行之间修改了表的内容(即,如果插入或更改了具有较早id
的行,则status = 1
(,则可能无法获得预期的确切行为。