隔离性:
事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其它事务干扰。就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能相互干扰。
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)是最严格的事务隔离级别。要求所有事务都被串行执行,即事务只能一个接一个地进行处理,不能并发执行。
隔离级别对比
![](https://img.haomeiwen.com/i5928323/a15b5d60b6925b94.png)
隔离级别 | 脏读 | 可重复读 | 幻读 |
---|---|---|---|
未提交读取 | 存在 | 不可以 | 存在 |
提交读取 | 不存在 | 不可以 | 存在 |
可重复读取 | 不存在 | 可以 | 存在 |
串行化 | 不存在 | 可以 | 不存在 |
事务隔离级别越高,就越能保证数据的完整性和一致性,但是同时对并发性能的影响也越大。
网友评论