使用 Spring Boot Data,2 个更新语句按顺序执行,但几乎同时执行(可能 1 或 2 纳秒),如下所示:
Update StatusTable SET status = 'IN-PROGRESS' AND updatedTime = NOW();
Update StatusTable SET status = 'DONE' AND updatedTime = NOW();
2 个更新语句返回具有相同值的updatedTime。
在用户界面中,我有一个屏幕,其中根据更新时间按时间顺序显示状态表。由于updatedTime相同,显示顺序错误:
1)准备就绪
2) 进行中
而不是
1) 进行中
2)准备就绪
注意:Thread.sleep() 或延迟时间在我的情况下不是一个好的选择
最佳答案
我打赌你使用的是秒精度的时间戳,对吗?开始使用更精细的精度,例如毫或微秒精度。如果这没有帮助(因为您使用的是速度极快的计算机,并且两次调用 NOW() 给出了相同的纳秒读数),您将不得不寻找另一个解决方案,并停止依赖时间戳。
作为一种解决方法,我会切换或(至少添加)通过自动增量 ID 进行排序。如果您的 SQL 遵循“时间顺序”,那么 IDS 将是唯一的并且顺序相同。
如果您有自动增量 ID,我会尝试 ORDER BY UpdatedTime ASC, id ASC
这将导致在时间戳相等时按 id 排序,但作为主机,我认为仅按 排序id
会给你想要的结果。
关于java - 2条更新语句几乎同时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46048781/