MySql如何处理在查询的其他部分使用要更新的字段的更新?

时间:2016-06-15 16:05:29

标签: mysql

所以说我有以下声明:

UPDATE time_tracking_table 
SET `end` = NOW(), `duration` = TIME_TO_SEC(TIMEDIFF(`end`,`start`)) 
WHERE `end` > NOW()

我想要实现的目标如下(使用晚上10点作为NOW()的示例):“查找end晚于晚上10点的所有行,然后更新{{1}对于该行并将其设置为晚上10点,然后计算该行的end与其新值(晚上10点)之间的差异start “。

我已经测试了上面的查询几天,它似乎工作。我的问题是:

a)是否可靠(或者考虑到同时更新duration并在end中使用end,是否存在某种竞争条件}和where)和......

b)即使它确实有效,是否有更好的方法来实现这一目标?

非常感谢您的时间和专业知识!

1 个答案:

答案 0 :(得分:3)

来自MySQL docs on UPDATE ...

  

以下语句中的第二个赋值将col2设置为   当前(更新)col1值,而不是原始col1值。结果   是col1和col2具有相同的值。这种行为不同于   标准SQL。

UPDATE t1 SET col1 = col1 + 1, col2 = col1;