事务中的脏读, 不可重复读, 幻读

脏读

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。

比如事务1,修改了某个数据
事务2,刚好访问了事务1修改后的数据
此时事务1,回滚了操作
事务2,读到还是回滚前的数据
此时,事务2读到的就是在内存中,而不是在数据库中的数据(事务1还未提交)

不可重复读

是指在一个事务内,多次读同一数据。
在这个事务还没有结束时,另外一个事务也访问该同一数据。
那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。

事务1,查询某个数据
事务2,修改了某个数据,提交

事务1,再次查询这个数据
这样事务1两次查询的数据不一样,称为不可重复读

幻读

是指第一个事务查询或操作一堆数据,事务2此时插入一条数据并提交,事务1再次查询或操作时,突然发现多了一条数据,像是幻觉一样。
与不可重复读类似,不过后者是修改了某一条,某条不同,而前者是增加了一条。
解决这三个情况,要使用数据库的事务级别,一般都有对应四种级别。

mysql中事务默认不允许脏读
这些情况一般在电子商务等网站中比较容易出现,因为对于商品是公共的,都可以访问和操作,而操作时又涉及到事务,这样必然就会出现类似脏读之类的情况,都是也要考虑多线程和高并发下的加锁,避免时间过长。
而在银行一类的网站中反而不会出现,因为金额是跟人挂钩的,你只能查询和操作自己的金额,比人不能动你的,就不涉及到脏读了,通常只要加行锁就满足了。

转载于:https://my.oschina.net/yehun/blog/871104

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值