MySQL更新表格集计数=计数+1并发问题

时间:2018-10-12 10:51:21

标签: mysql database concurrency

我需要更新一个表,并在每次调用时设置VOTE_COUNT = VOTE_COUNT + 1,说我有10,000个并发访问数据库并同时执行同一条语句:

UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;

是否有任何并发​​问题导致结果不等于 10000? (初始计数= 0)

1 个答案:

答案 0 :(得分:1)

取决于mysql / mariadb基础存储引擎,您可能会遇到并发或性能问题。

最好是拥有一个具有事务处理功能的存储引擎-这样就不会出现并发问题。

对于使用没有事务处理的存储引擎的情况,它取决于锁定(基于行,表或行)。

在没有锁定的情况下,您可能会遇到并发问题,因为两个更新语句可以同时读取一个值,将其加1并存储回去-这样一个(或多个)更新语句将丢失!因为它们都将存储相同的值。

为每个更新锁定表时,对于您的并发更新语句而言,事情将会变得很慢!