老师你好,关于视频中扣除库存的疑问

老师你好,关于视频中扣除库存的疑问

老师你好,视频里面,如果多个事务在同时扣除库存怎么办?麻烦老师给解答下实际项目中我们是如何处理的

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
芝芝兰兰 2019-09-23 19:24:00

同学你好。间隙锁确实存在,间隙锁其实就是阻止在主键不连续(间隙)的位置被插入数据。从查阅的资料看,MySQL在可以在可重复读的隔离级别下解决幻读问题的,但是靠的不仅仅是nest-key锁,还有undolog日志。至于复现问题,由于这是在高并发的情况下才有可能发生的事件,在单机情况下并没有那么容易复现。

如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 提问者 慕仔3163040 #1
    老师你好,能具体说下mysql是如何通过间隙锁和undolog避免在可重复读隔离级别下的幻读问题的吗?我个人已经在网上翻了大量技术文档,目前还是有点迷惑,麻烦老师给具体解释下,谢谢
    2019-09-24 00:03:53
  • 芝芝兰兰 回复 提问者 慕仔3163040 #2
    简单来说,innodb的每个事务都会有一个事务ID,在可重复读隔离级别下,每次启动事务都会在undo日志中记录一个事务中数据的状态快照,然后在事务过程中会通过读取 undo 日志中的快照达到避免幻读的目的。祝学习愉快~
    2019-09-24 11:14:59
好帮手慕阿满 2019-09-20 14:52:44

同学你好,如果出现并发事务,比如说一个正在修改数据,另一个去读取数据的情况,通常是设置事务的隔离级别。

事务的隔离级别:

读未提交数据(Read uncommitted): 如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。避免了更新丢失,却可能出现脏读、不可重复读、幻读的情况。

读已提交数据(Read committed):读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。避免了脏读,但是却可能出现不可重复读、幻读的情况。

可重复读(Repeatable read): 读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。避免了不可重复读取和脏读,但是有时可能出现幻读。

可串行化(Serializable): 提供严格的事务隔离。它要求事务串行化执行,事务只能一个接着一个地执行,但不能并发执行。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕仔3163040 #1
    老师你好,我在mysql的可重复度的事务隔离级别下,开启两个session,但是确实没有复现出来幻读的问题,也可能是我自己复现的方式有问题吧,但是mysql的nest-key锁(行锁+间隙锁)确实是存在的
    2019-09-21 00:47:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师