MySQL更新表设置count = count +1并发问题

问题描述 投票:1回答:1

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

UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;

是否会导致结果不等于10000? (初始计数= 0)

mysql database concurrency
1个回答
1
投票

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

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

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

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

为每次更新锁定表时,对于并发更新语句,事情会变得非常慢!

© www.soinside.com 2019 - 2024. All rights reserved.