数据库事物隔离级别

事物引发的问题:

更新丢失
:两个或多个事务选择同一行,然后基于最初选定的值更新数据,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题(最后更新的覆盖了之前更新的数据)

脏读:一个事务正在对一条记录做修改,在这个事务完成并提交之前这条记录的数据就处于不一致状态;这时另一个事务读取同一条记录,如果不加控制,第二个事务读取到了这些“脏”数据

不可重复读:一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现读出的数据已经发生了改变,或者记录被删除了

幻读:一个事务按相同的查询条件重新读取以前检索过的数据,发现其他事物插入了满足查询条件的新数据。

 

隔离级别

read  uncommitted   未提交读(脏读)
事物在修改中,即使没有提交其它事物也是可见的。会出现脏读的情况。从性能上来说,不会比其它的级别好太多。


read committed 提交读(不可重复读)
事物从开始到提交之前所做的任何修改,对其它事物都是不可以见的。也叫不可重复读,因为两次读取的内容可能不一样。
大多数数据库默认的隔离级别,mysql 不是。


repeatable read 可重复读
在同一个事物中,多次读取同样的记录结果是一致的。解决了脏读问题。
在理论上无法解决另外一个幻读问题:事物A 读取范围内的记录时,事物B在此范围内又插入了记录,此时事物A再次读取此范围的记录时会产生幻行(Phantom row)。InnoDB 和 XtraDB 存储引擎通过多版本并发控制解决了幻读问题。
mysql 默认的隔离级别。

serializable 可串行化
通过强制事物串行执行,避免了前面说的幻读的问题。
serializable 会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。

 

 

 

 

 

隔离级别                    脏读可能性     不可重复读可能性    幻读可能性     加锁读
read uncommitted      yes                     yes                           yes                  no
read committed          no                       yes                           yes                  no
repeatable read         no                       no                             yes                  no
serializable                 no                       no                             no                   yes

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值