仅从job crons、mysql中的表更新max id\u post

szqfcxe2  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(274)

我有一张table 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作业中运行它的话。谢谢你。
tgabmvqs

tgabmvqs1#

是的,您的查询将在mysql中按预期工作。与其他数据库不同,mysql支持 order by 以及 limitupdate 声明。文档中描述了它们的行为:
这个 WHERE 子句指定标识要更新哪些行的条件。没有 WHERE 子句,则更新所有行。如果 ORDER BY 子句时,行将按指定的顺序更新。这个 LIMIT 子句对可以更新的行数进行了限制。
因此,您的查询将使用 status = 3 (按排序列定义) id ),并更改 status1 . 下次执行时,“next”行 status = 3 已拾取并更新。
但是,请注意,如果在随后的查询执行之间修改了表的内容(也就是说,如果一行的 id 插入或更改 status = 1 ),您可能无法获得预期的确切行为。

相关问题