短视频直播源码,事务并发存在的问题
短视频直播源码,事务并发存在的问题
在短视频直播源码中,事务并发执行存在什么问题呢,换句话说就是,一个事务是怎么干扰到其他事务的呢?看例子吧~
假设现在有表:
CREATE TABLE `account` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`balance` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `un_name_idx` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表中有数据:

假设现在有两个事务A、B:
假设现在A的余额是100,事务A正在准备查询Jay的余额
这时候,事务B先扣减Jay的余额,扣了10
最后A 读到的是扣减后的余额

由上图可以发现,事务A、B交替执行,事务A被事务B干扰到了,因为事务A读取到事务B未提交的数据,这就是脏读。
假设现在有两个事务A和B:
事务A先查询Jay的余额,查到结果是100
这时候事务B 对Jay的账户余额进行扣减,扣去10后,提交事务
事务A再去查询Jay的账户余额发现变成了90

事务A又被事务B干扰到了!在事务A范围内,两个相同的查询,读取同一条记录,却返回了不同的数据,这就是不可重复读。
假设现在有两个事务A、B:
事务A先查询id大于2的账户记录,得到记录id=2和id=3的两条记录
这时候,事务B开启,插入一条id=4的记录,并且提交了
事务A再去执行相同的查询,却得到了id=2,3,4的3条记录了。

事务A查询一个范围的结果集,另一个并发事务B往这个范围中插入/删除了数据,并静悄悄地提交,然后事务A再次查询相同的范围,两次读取得到的结果集不一样了,这就是幻读。
以上就是短视频直播源码,事务并发存在的问题, 更多内容欢迎关注之后的文章
浙公网安备 33010602011771号