浅谈ACID的I

2019-05-12  本文已影响0人  陈阳001

隔离性:

事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其它事务干扰。就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能相互干扰。

4个隔离级别:

未授权读

未授权读也被称为对未提交(Read Uncommitted),该隔离级别允许脏读,这个隔离级别最低。就是说,如果一个事务正在处理某一个数据,并对其进行了更新,但是还没完成事务,事务还没有提交;而此时,允许另一个事务也能访问到该数据。例子:事务A和事务B同时进行,事务A在整个执行阶段,会将数据项的值从1开始,做一系列的加法动作(比如说加1操作)直到变成10后再进行事务的提交,此时,事务B能够看到这个数据项在事务A操作中的所有中间值(如1变成2,2变成3等),而对这一系列的中间值的读取就是未授权读取。

授权读取

授权读取也被称为读已提交(Read Committed),它和未授权读的区别是授权读取只允许已经被提交的数据。例子:事务B无法看到这个数据项在事务A操作过程中的所有中间值,只能看到最终的10。另外,如果有一个事务C和事务A进行非常相似的操作,只是事务C是将数据项从10加到20,此时事务B也同样可以读到20,即授权读取允许不可重复读。

可重复读

可重复读取(Repeatable Read),简单地说,就是保证在事务处理过程中,多次读取同一个数据时,其值和事务开始的时候是一致的。因此该事务级别禁止了不可重复读取和脏读,但是有可能出现幻影数据。就是指同样的事务操作,由于别的事务增加了记录,致使两次看到的数量不一样。

串行化

串行化(Serializable)是最严格的事务隔离级别。要求所有事务都被串行执行,即事务只能一个接一个地进行处理,不能并发执行。

隔离级别对比

隔离级别解析.png
隔离级别 脏读 可重复读 幻读
未提交读取 存在 不可以 存在
提交读取 不存在 不可以 存在
可重复读取 不存在 可以 存在
串行化 不存在 可以 不存在

事务隔离级别越高,就越能保证数据的完整性和一致性,但是同时对并发性能的影响也越大。

上一篇 下一篇

猜你喜欢

热点阅读