在mysql中安全地增加一个字段?

时间:2012-10-20 00:48:14

标签: php mysql

我知道有一些帖子已经只是想知道使用

的安全性
UPDATE table SET field = field + 1 WHERE [...]

如果服务器延迟一秒怎么办?假设2个用户同时点击该页面,是否会导致他们同时将该字段读取为相同的数字,并且将相同的字段增加1?我猜测因为它是mysql它有一种查询系统,一次做一个但不确定是否真的,只是假设是真的。

3 个答案:

答案 0 :(得分:4)

在此示例中,读取和更新发生在同一语句中。语句是原子的(即你可以认为它们以事务方式运行),所以一切都很好。

答案 1 :(得分:2)

update语句是原子的。运行更新查询时,表(或带有innodb的行)将被锁定。期。如果两个用户单击“同时”,它将正确地增加该字段两次。

答案 2 :(得分:0)

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

不是更新,只需插入另一个表(架构无关紧要),定期(不经常)计算该表中的项目,并根据该更新计算另一个表。如果表增长到大,则简单地递增计数,然后删除条目。还允许您添加其他元数据,例如时间戳以供进一步分析。