系统原理-隔离级别

四大隔离级别,以及不可重复读和幻影读的出现原因。

一、并发一致性问题


在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。

丢失修改


丢失修改指一个事务的更新操作被另外一个事务的更新操作替换。

读脏数据


读脏数据指在不同的事务下,当前事务可以读到另外事务未提交的数据。

不可重复读


不可重复读指在一个事务内多次读取同一数据集合。在这一事务还未结束前,另一事务也访问了该同一数据集合并做了修改,由于第二个事务的修改,第一次事务的两次读取的数据可能不一致。

幻影读


幻读本质上也属于不可重复读的情况,T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。


产生并发不一致性问题的主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的隔离级别,让用户以一种更轻松的方式处理并发一致性问题。

二、隔离级别


  • 未提交读(READ UNCOMMITTED)
    • 事务中的修改,即使没有提交,对其它事务也是可见的。
  • 提交读(READ COMMITTED)
    • 一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。
  • 可重复读(REPEATABLE READ)
    • 保证在同一个事务中多次读取同一个数据的结果是一样的。
  • 可串行化(SERIALIAZABLE)
    • 强调事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。
    • 该隔离级别需要加锁实现,因为要使用加锁机制保证同一时间只有一个事务执行,也就是保证事务串行执行。

隔离级别能解决的并发一致性问题

脏读 不可重复读 幻读
未提交读 1 1 1
提交读 0 1 1
可重复读 0 0 1
串行化 0 0 0
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容