当前位置:网站首页>On the concurrency of update operation
On the concurrency of update operation
2020-11-08 13:52:00 【osc_7eqzxl4g】
In a high concurrency scenario , This is often the case :
A Please come here , Look up a piece of data , Conduct update operation , meanwhile B Please come here at this time , Query this data , And operate . And then there will be B stay A After that, the query operation will be carried out , But the actual B But the data is A Cover .
Table name A, Field called number, As follows SQL sentence :
A operation sentence 1:select num from store where id='1';
Suppose that at this point a gets num= 99
B operation sentence 2:select num from store where id='1';
Because Party A has not yet update operation , B also got num= 99
Now A Conduct update operation
update store set num =${num} +1 where id='1';
At this time, it is written to the database num That is to say 100
here B The request also initiated the update operation :
update store set num =${num} +1 where id='1';
Our expectation at this time should have been 101 Of , But actually B I wrote in the database again 100
Solution :
(1) Introduce the concept of a version number , In the table A Add one version Field
A operation sentence 1:select num,version from store where id='1';
Suppose that at this point a gets num= 99 version =1
B operation sentence 2:select num,version from store where id='1';
Because Party A has not yet update operation , B also got num= 99 version=1
Now A Conduct update operation
update store set num =${num} +1 where id='1' and version = ${version};
At this time, it is written to the database num That is to say 100, version =2
here B The request also initiated the update operation :
update store set num =${num} +1 where id='1' and version = ${version} ;
At this time, we found the condition version = 1 Don't set up , Because the last step is version Have been to 2 了 , therefore update Cannot update .
(2) Solution :update A set number=number+1 where id=1; Statements are processed directly
Table name A, Field called number, As follows SQL sentence :
sentence 1:update A set number=number+1 where id=1;
sentence 2:update A set number=number+2 where id=1;
Suppose these two SQL The statement is simultaneously mysql perform ,id=1 In the record number The original value of the field is 99, So is it possible that :
sentence 1 and 2 Because at the same time , They got number The values are all 99, It's all in 10 On the basis of 1 and 2, Lead to the final number Is updated to 100 or 101, instead of 102
This is actually Relational database itself needs to solve the problem . First , They were also MySQL perform , What you mean is that they are executed concurrently , The concurrent transaction is supported by special theory in relational database - ACID, The theory of transaction parallelism , All relational databases implement , Include Oracle, MySQL We need to follow this principle .
The simple understanding is the principle of lock . This is the first time update Will hold id=1 This line records Exclusive lock , the second update You need to have an exclusive lock on this record to modify it , Normal word , the second update It will block , Until the first one update Submit successfully , He'll get the lock , To modify the data .
in other words , According to the theory of relational database , these two items. update If they all succeed ,id=1 Of number It must be modified to 22. If not 22, That's a serious problem with database implementation bug.
版权声明
本文为[osc_7eqzxl4g]所创,转载请带上原文链接,感谢
边栏推荐
- Eight ways to optimize if else code
- From a friend recently Ali, Tencent, meituan and other P7 Python development post interview questions
- I used Python to find out all the people who deleted my wechat and deleted them automatically
- 10 common software architecture patterns
- Golang 系统ping程序探测存活主机(任意权限)
- Rust: performance test criteria Library
- Or talk No.19 | Facebook Dr. Tian Yuandong: black box optimization of hidden action set based on Monte Carlo tree search
- Station B STM32 video learning
- AQS解析
- Returning to the third place in the world, what did Xiaomi do right?
猜你喜欢
Interpretation of deepmind's latest paper: the causal reasoning algorithm in discrete probability tree is proposed for the first time
Tips and skills of CSP examination
Suitable for C / C + + novice learning some projects, do not give me to miss!
[Python 1-6] Python tutorial 1 -- number
Introduction to mongodb foundation of distributed document storage database
Enabling education innovation and reconstruction with science and technology Huawei implements education informatization
Eight ways to optimize if else code
在51CTO学院Get到PMP证书
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
I used Python to find out all the people who deleted my wechat and deleted them automatically
随机推荐
wanxin finance
We made a medical version of the MNIST dataset, and found that the common automl algorithm is not so easy to use
Why is Schnorr Signature known as the biggest technology update after bitcoin segwit
【Python 1-6】Python教程之——数字
漫画:寻找股票买入卖出的最佳时机(整合版)
STM32CubeIDE下载安装-GPIO基本配置操作-Debug调试(基于CMSIS DAP Debug)
On the software of express delivery cabinet and deposit cabinet under Windows
Research on WLAN direct connection (peer-to-peer connection or P2P) and cross platform research of IOS
Shell uses. Net objects to send mail
Ubuntu20.04 access FTP server garbled problem + upload files
后端程序员必备:分布式事务基础篇
Implementation of verification code recognition in Python opencv pytesseract
擅长To C的腾讯,如何借腾讯云在这几个行业云市场占有率第一?
How to cooperate with people in software development? |Daily anecdotes
Windows下快递投递柜、寄存柜的软件初探
Rust : 性能测试criterion库
LeanCloud 十月变化
Major changes in Huawei's cloud: Cloud & AI rises to Huawei's fourth largest BG with full fire
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
What can your cloud server do? What is the purpose of cloud server?