几乎同时执行2个更新语句

时间:2017-09-05 07:00:32

标签: java mysql database

使用Spring Boot Data,2个更新语句按顺序执行,但几乎同时执行(可能是1或2纳秒),如下所示:

  

更新StatusTable SET status ='IN-PROGRESS'和updatedTime = NOW();

     

更新StatusTable SET status ='DONE'和updatedTime = NOW();

2个更新语句以相同值返回updatedTime。

在UI中,我有一个屏幕,根据updatedTime按时间顺序显示StatusTable。由于相同的updatedTime,它显示错误的顺序:

1)READY

2)进行中

而不是

1)进行中

2)准备

注意:在我的情况下,Thread.sleep()或延迟时间不是一个好的选择

1 个答案:

答案 0 :(得分:2)

我打赌你正在使用秒精度的时间戳吗?开始使用更精细的精度,如mili或微秒精度。如果这没有帮助(因为你使用超快的计算机和2次调用NOW()给出相同的纳秒读数)你将不得不找到另一种解决方案,并根据时间戳停止。

作为一种解决方法,我会通过自动增量ID切换或(至少添加)排序。如果您的SQL遵循“时间顺序”,那么IDS将是唯一的并且顺序相同。

如果您有自动增量ID,我会尝试ORDER BY updatedTime ASC, id ASC这会导致在时间戳相等时按ID进行排序,但是要进行测试我认为仅按id排序会给您带来理想的结果。< / p>