美文网首页
数据库隔离级别

数据库隔离级别

作者: AngryApe | 来源:发表于2018-05-02 23:54 被阅读0次

事务存在的问题

  • 脏读:T1读取到了T2未提交的数据,这样会导致T2回滚后,再在T1里读取,得到不同的结果
  • 重复读(不一致读):T1重复读取同一条数据,T2在期间做了更新操作,导致读取到的数据不一致
  • 幻读:T1重复读取记录,T2在期间插入了数据,导致读取到数据量不一致

重复读针对的是同一条记录的更新、删除操作,幻读是针对数据的插入。原因在于锁的控制,要避免重复读,只需要在T1中为读取到每一行数据加锁,避免其他事务对记录进行更新,而对于插入操作,由于是新纪录,无法加锁,所以需要的隔离级别需要再次升级。

事务隔离级别

参考:https://blog.csdn.net/lanxinglan/article/details/51953304

ReadUncommited

实现原理:1.事务在读取时不对行加任何锁;2.事务更新时对数据加行级共享锁;

存在的问题:脏读、重复读、幻读

ReadCommited

实现原理: 1.读取时加行级共享锁,读取完即释放;2.更新时加排它锁,共享锁和排它锁互斥,所以必须等到事务提交后才能读取;

存在的问题:重复读、幻读

ReadRepeated

实现原理:1.读取时加行级锁,直到事务结束释放;2.更新时加排它锁,由于互斥,在读取时不能进行更新操作,也就保证了读取的事务获取到的数据不会出现不一致的现象;

存在的问题:幻读

Serializable

实现原理:1.读取时加表级共享锁;2.更新、插入时加表级排它锁;由于互斥,在读取时不能进行插入操作,从而避免幻读;

相关文章

网友评论

      本文标题:数据库隔离级别

      本文链接:https://www.haomeiwen.com/subject/yerhrftx.html