当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
猜你喜欢
原创 | 数据资产确权浅议
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
2035 we will build such a country
Rabbitmq (1) - basic introduction
Tips and skills of CSP examination
Comics: looking for the best time to buy and sell stocks
Don't look! Full interpretation of Alibaba cloud's original data lake system! (Internet disk link attached)
python基础教程python opencv pytesseract 验证码识别的实现
应届生年薪35w+ !倒挂老员工,互联网大厂薪资为何越来越高?
大龄程序员没有出路吗?
随机推荐
Flink from introduction to Zhenxiang (7. Sink data output file)
浅谈OpenGL之DSA
svg究竟是什么?
漫画|讲解一下如何写简历&项目
python基础教程python opencv pytesseract 验证码识别的实现
Flink从入门到真香(10、Sink数据输出-Elasticsearch)
Restfulapi learning notes -- father son resources (4)
最全!阿里巴巴经济体云原生实践!(附网盘链接)
Tidb performance competition 11.02-11.06
Major changes in Huawei's cloud: Cloud & AI rises to Huawei's fourth largest BG with full fire
Ubuntu20.04 access FTP server garbled problem + upload files
模板引擎的整理归纳
Android Basics - check box
OR Talk NO.19 | Facebook田渊栋博士:基于蒙特卡洛树搜索的隐动作集黑盒优化 - 知乎
AI weekly: employees are allowed to voluntarily reduce salary; company response: employees are happy and satisfied; tiger tooth HR takes employees out of the company; Sweden forbids Huawei ZTE 5g equi
Or talk No.19 | Facebook Dr. Tian Yuandong: black box optimization of hidden action set based on Monte Carlo tree search
还不快看!对于阿里云云原生数据湖体系全解读!(附网盘链接)
This time Kwai tiktok is faster than shaking.
AQS analysis
“他,程序猿,35岁,被劝退”:不要只懂代码,会说话,胜过10倍默默努力