安全地增加MySQL中的字段



我知道这已经有几篇文章已经想知道它的安全性

UPDATE table SET field = field + 1 WHERE [...]

如果服务器滞后了SEC怎么办?假设2个用户同时单击页面,这是否会导致他们同时将字段读为相同的数字,又要将同一字段递增1?我猜是因为是mysql,它一次通过一次进行一个查询系统,但不确定是否是真的,只假定这是真的。

在此示例中,读取和更新发生在同一语句中。陈述是原子的(即您可以考虑以交易方式行事),因此一切都很好。

更新语句是原子。当您运行更新查询时,表(或带有InnoDB的行)被锁定。时期。如果两个用户同时单击"同时",它将正确增强该字段两次。

这是我使用的另一种方法(如果您有单独的查询并且不想不必要地锁定表):

而不是更新,只需插入另一个表(架构没关系),而是定期计数该表中的项目(不太频率),然后基于该表格。如果表格生长到大,简单地增加计数,然后删除条目。还可以添加其他元数据,例如时间戳进行进一步分析。

最新更新