我需要更新一个表,并在每次调用时设置VOTE_COUNT = VOTE_COUNT + 1
,说我有10,000个并发访问数据库并同时执行同一条语句:
UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;
是否有任何并发问题导致结果不等于 10000? (初始计数= 0)
答案 0 :(得分:1)
取决于mysql / mariadb基础存储引擎,您可能会遇到并发或性能问题。
最好是拥有一个具有事务处理功能的存储引擎-这样就不会出现并发问题。
对于使用没有事务处理的存储引擎的情况,它取决于锁定(基于行,表或行)。
在没有锁定的情况下,您可能会遇到并发问题,因为两个更新语句可以同时读取一个值,将其加1并存储回去-这样一个(或多个)更新语句将丢失!因为它们都将存储相同的值。
为每个更新锁定表时,对于您的并发更新语句而言,事情将会变得很慢!