mysql - MySQL更新表集计数=计数+1并发问题
问题描述
我需要更新一个表并VOTE_COUNT = VOTE_COUNT + 1
在每次调用时设置,假设我有 10,000 个并发访问数据库并同时执行相同的语句:
UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;
是否有任何并发问题导致结果不等于 10000?(初始计数 = 0)
解决方案
根据 mysql/mariadb 底层存储引擎,您可能会遇到并发或性能问题。
最好的办法是拥有一个具有事务处理功能的存储引擎——这样您就不会遇到并发问题。
对于您使用没有事务处理的存储引擎的情况,它取决于锁定(否,基于行或表)。
如果没有锁定,您可能会遇到并发问题,因为两个更新语句可以同时读取一个值,加 1 并将其存储回来 - 因此一个(或多个)更新语句将丢失!因为它们都将存储相同的值。
为每次更新锁定表时,并发更新语句的速度会变得非常慢!
推荐阅读
- c++ - LLDB 中的重复命令
- javascript - 如何在两个滚动位置之间切换?
- html - How to position a div at the end of a navbar? With bootstrap 4
- java - prunsrv installed service cannot start
- swift - How can I load a Swift package configuration programmatically?
- linux - ALSA snd_pcm_hw_params_any crashed when run the application from startup script
- mongodb - mongo db如何将递增序列值添加到现有集合中
- c# - 暂时限制玩家移动到地图的某个区域 Unity 游戏开发 C#
- matlab - 使用 CPLEX/AMPL 解决 SOCP 问题的速度比使用 CPLEX/MATLAB 解决时快 10 倍,为什么?
- python - beautifulsoup4 一直打印无