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