首页 > 解决方案 > MySQL更新表集计数=计数+1并发问题

问题描述

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

UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;

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

标签: mysqldatabaseconcurrency

解决方案


根据 mysql/mariadb 底层存储引擎,您可能会遇到并发或性能问题。

最好的办法是拥有一个具有事务处理功能的存储引擎——这样您就不会遇到并发问题。

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

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

为每次更新锁定表时,并发更新语句的速度会变得非常慢!


推荐阅读