我需要在每次调用时更新一个表并设置VOTE_COUNT = VOTE_COUNT + 1,假设我对数据库有10,000个并发访问权限,同时执行相同的语句:
UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;
会不会有并发问题导致结果不等于10000?(初始计数= 0)
发布于 2018-10-12 19:50:50
根据mysql/mariadb底层存储引擎的不同,您可能会遇到并发或性能问题。
最好的做法是有一个具有事务处理功能的存储引擎,这样就不会出现并发问题。
对于使用没有事务处理的存储引擎的情况,它取决于锁定(否,基于行或基于表)。
如果没有锁,可能会出现并发问题,因为两个update语句可以同时读取值、加1并将其存储回去--因此一条(或多条) update语句将丢失!因为它们都会存储回相同的值。
当为每次更新锁定表时,并发update语句的执行速度将变得非常慢!
https://stackoverflow.com/questions/52777969
复制相似问题