摘要
SQL Isolation Levels
上一节讨论了手动控制每个应用程序甚至每个事务的锁定持续时间的想法,通过仅允许应用程序架构师或开发人员选择有限数量的“锁定样式”选项,可以使其更加安全。这些选项称为隔离级别,其中之一就是通常的冲突可串行化概念,它们甚至已被纳入 SQL 标准。通过发出相应的 SQL 命令“set isolation level ...”来选择特定的隔离级别
SQL 标准支持的隔离级别是根据与(强)严格两阶段锁定的受控偏差来定义的。然而,它们应该被理解为调度类,尽管是由特定的锁定协议生成的,但可以通过服务器选择使用的任何适当的并发控制算法来强制执行。实际上最重要的隔离级别定义如下:
定义 10.1 隔离级别
如果根据 S2PL 获取和释放写锁,即所有写锁都保持到事务结束,则称调度 \(s\) 在隔离级别读未提交(Read Uncomitted,也称为脏读或浏览级别)下运行。
如果根据 S2PL 获取和释放写锁,并且读锁(至少)在客户端发出的每个数据服务器操作的持续时间内保持,则称调度 \(s\) 在隔离级别读已提交(Read Comitted,也称为游标稳定性级别)下运行。
如果调度 \(s\) 可以通过 S2PL 协议生成,则称调度 s 在隔离级别(冲突)可串行化(SER)下运行。