所以说我有以下声明:
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)即使它确实有效,是否有更好的方法来实现这一目标?
非常感谢您的时间和专业知识!
答案 0 :(得分:3)
来自MySQL docs on UPDATE
...
以下语句中的第二个赋值将col2设置为 当前(更新)col1值,而不是原始col1值。结果 是col1和col2具有相同的值。这种行为不同于 标准SQL。
UPDATE t1 SET col1 = col1 + 1, col2 = col1;