
的隔离是ACID保证的重要组成部分. 应该区分原子性和隔离性的不同含义. 为了实现原子性的悲观/乐观并发控制两种策略,在原子性的基础上实现隔离隔离级别 详解,有悲观并发控制策略和乐观并发控制策略.
不同的应用方案对隔离有不同的要求. 隔离度越高,数据一致性程度越高隔离级别 详解,但性能开销也越大. 相反,降低隔离要求将牺牲一些数据一致性,但可以提供性能. 选择的一致性应从应用程序的逻辑要求出发,选择满足数据逻辑要求的最低隔离级别.
本文使用技术中的“读取现象”(“读取现象”)作为线索,详细解释了ANSI SQL标准中定义的隔离级别.

1. 脏读(dirty read)现象
所谓的脏读取是指两个并发事务,其中之一读取尚未提交的数据. 如下图所示,如果Transaction1读取了Transaction2尚未提交的数据,则称为脏读取.


将发生脏读的隔离级别称为“读未提交”. 如果应用程序场景中有需求,并且您需要避免脏读,则需要提高隔离级别. 消除脏读的策略是显而易见的,即,由未提交的事务进行的数据修改应写入缓冲区,而其他事务则不可见. 消除振幅现象后,的隔离级别将升级为“读取已提交”.
2. 不可重复读(Non-repeatable reads)现象
所谓的“不可重复读取”是指在执行事务期间两次读取相同的数据,但是执行的结果不同. 如下图所示,Tansaction1在执行期间执行了两次相同的读取,但是由于Transaction2修改了数据,因此Transaction1执行两次读取的结果将有所不同.


无法进行重复读取的隔离级别称为“读取已提交”. 如果应用程序场景中有要求,并且需要避免无法重复阅读,则需要提高隔离级别. 消除不可重复读段有两种常见策略:
如果使用上述策略1,则的隔离级别将升级到最高的可序列化隔离级别. 如果使用上述策略2,则可以消除重复读取的现象,幻像读取仍然存在于单个中. 此时,的隔离级别称为“可重复读取”.

3. 幻读(Phantom reads)现象
所谓的幻像读取意味着在执行事务期间两次执行相同的SELECT操作,但是返回的结果集不同. 如下图所示,Tran1的两个SELECT操作返回不同的行集.

为避免幻像读取现象,必须锁定所谓的范围操作. 在上面的示例中,范围[Age: 10〜30]被锁定,并且该范围内的任何行操作都需要等待. 消除了幻像读取,已升级到最高的可序列化隔离级别.
4. 摘要
如下所示:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-190484-1.html
踏踏实实对你一百个放心
小问题不断
1和之前的都不卡听卖手机的说个别更新了会卡