并发控制与数据库不一致性:丢失修改、不可重复读、脏读

需积分: 20 1 下载量 122 浏览量 更新于2024-08-15 收藏 863KB PPT 举报
"数据库并发控制中的三种数据不一致性问题,包括丢失修改、不可重复读和读“脏”数据,是由于并发操作破坏了事务的隔离性。为了保证数据一致性,DBMS需要采取并发控制措施,如封锁技术。封锁分为排它锁(X锁)和共享锁(S锁),用于控制事务对数据对象的访问权限。" 并发控制是数据库系统中确保多事务同时运行时数据完整性的重要机制。当多个事务并发操作数据库时,如果不加以控制,可能会导致三种主要的数据不一致性问题: 1. **丢失修改**:在这个例子中,事务T1读取数据A的值为16,然后减去1,准备写回。同时,事务T2也读取A的值为16,乘以2,写回为200。如果T1的更改被覆盖,那么T1的修改就会丢失。这通常发生在两个事务对同一数据进行读-修改-写操作且顺序不同的情况下。 2. **不可重复读**:事务T1在某次读取数据B为100后,事务T2修改B为200并写回。当T1再次读取B时,读到的值与之前不同,即出现了不可重复读。这表明事务在不同时间读取同一数据时可能得到不同的结果。 3. **读“脏”数据**:事务T2在事务T1未提交的更改上操作,读取了未提交的值(例如C=100,T1未提交的C*C=200)。如果T1回滚,那么T2读到的就是“脏”数据,因为这些数据从未正式存在于数据库中。 为了避免这些问题,数据库管理系统使用并发控制技术,其中最常见的是**封锁**。封锁是事务在操作数据对象前先申请锁定,以防止其他事务在同一时间修改数据。封锁有两种基本类型: - **排它锁(X锁)**:允许事务读取和修改数据,但不允许其他事务在此期间进行任何锁定操作,直至该事务释放锁。 - **共享锁(S锁)**:只允许事务读取数据,但不允许修改。其他事务可以加S锁读取数据,但不能加X锁进行修改,直到当前事务释放S锁。 除了封锁,还有**时间戳**和**乐观控制法**等并发控制技术。时间戳通过为每个事务分配一个时间戳,并根据时间戳顺序决定事务的执行顺序,以避免冲突。乐观控制法则假设冲突是罕见的,事务在提交前检查是否有冲突,若有则回滚。 在实际的数据库系统中,比如商用DBMS,通常会结合使用多种并发控制策略,以达到高效且安全的并发操作。封锁是最常用的一种方法,因为它能提供较强的事务隔离性,确保数据的一致性。