SQL并发控制:不可重复读现象与解决策略

需积分: 34 11 下载量 72 浏览量 更新于2024-08-15 收藏 771KB PPT 举报
不可重复读(续)是SQL并发控制中的一个重要概念,它涉及到数据库事务在并发环境下的执行问题。当一个事务(如事务T1)在读取数据后,另一个事务(如事务T2)对其进行修改,导致事务T1再次读取时结果发生变化,这种情况被称为不可重复读。具体表现为: 1. **数据值的变化**:如例子中,甲和乙事务同时读取并修改飞机票余额A,虽然最终写回数据库的值都是15,但因为并发修改,导致甲事务看到的初始余额为16而非15,出现了不一致。 2. **数据删除或插入的影响**:事务T1读取的数据,可能在事务T2执行删除或插入操作后变得不可预测。如果T2删除了数据,T1再次读取时会发现数据消失;如果T2插入数据,T1可能会读到新增的数据,从而出现幻影现象。 并发控制是为了解决这些并发问题而设计的,它确保在多个事务并发执行时,数据的一致性和事务隔离性得以维护。以下是并发控制机制的关键点: - **事务处理**:事务是并发控制的基本单元,确保ACID属性(原子性、一致性、隔离性和持久性)。 - **并发调度**:DBMS负责正确调度并发操作,避免冲突。 - **隔离级别**:通过设置不同的隔离级别来控制不可重复读等并发问题,比如可重复读(Repeatable Read)、读已提交(Read Committed)等。 - **封锁机制**:这是一种常用的并发控制手段,通过锁定数据防止其他事务的修改,如行级锁、页级锁和表级锁等。 - **活锁与死锁**:活锁是指两个或更多事务相互等待对方释放资源,而死锁则是指多个事务彼此等待,形成环路,导致无法继续执行。DBMS需检测并解决这两种问题。 - **两段锁协议**:一种常见的并发控制策略,事务分为两个阶段,首先申请锁再进行操作,操作完成后释放锁,防止锁定冲突。 - **锁的粒度**:锁的大小会影响并发性能,粒度越细,并发性越低,但安全性越高。 举例来说,第11章中的飞机订票系统活动序列展示了并发控制的必要性,尽管两个事务看起来独立,但在并发环境中,没有适当的并发控制可能导致数据不一致。理解并发控制原理和机制对于设计高效、安全的数据库系统至关重要。