看了一下,MYSQL在读写时会自动给表或者行加锁,那为什么还会出现所谓的并发问题?

假如说1000块钱,我2人同时借钱各200,不去控制,mysql不是在写入时会加锁吗,我不去控制,两个写入执行的应该是一个一个来吧,结果应该就剩600块啊,为什么网上有的... 假如说1000块钱,我2人同时借钱各200,不去控制,mysql不是在写入时会加锁吗,我不去控制,两个写入执行的应该是一个一个来吧,结果应该就剩600块啊,为什么网上有的帖子说这样会出现不等于600的情况啊?求解! 展开
 我来答
chenxiaojiedtc
2020-06-01 · TA获得超过140个赞
知道答主
回答量:31
采纳率:0%
帮助的人:16.3万
展开全部
我理解的是:读表的锁表是指在读的过程中上锁,不允许中途还insert其他记录,当读表完毕,获得select结果后,表就解锁了,可以继续新的select或insert等操作。
例子里:2人同时借钱,没有业务锁的话,两个请求发到后端后可能同时去select,此时2次借款操作select余额都是1000(在另一人借200后回写余额800之前),于是2个请求操作各自开始借钱,算出借钱后都剩下800,再分别update进表中,表里余额就是800
如果加业务锁:2个请求到后端后,select余额和借钱后Update按一个事务进行,那第1人select 1000元并借款后剩下800更新进表中,完成第1人借钱事务后,再进行第2人借钱select 剩下的800元并借款后剩下600更新进表中,就可以避免
落瑾_夏逝
2018-04-13
知道答主
回答量:3
采纳率:0%
帮助的人:2589
展开全部
这个问题很简单,仔细想想如果这两个动作一个成功一个失败了怎么办,那我的钱岂不是没了,这涉及到了事务,要保证成功同时提交,失败同时回滚
追问
您好,我想问的本质是,mysql既然已经可以自动加锁了,有些情况却还要人为添加乐观锁等等的锁啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式