系统文章目录
数据库的四个基本概念:数据、数据库、数据库管理系统和数据库系统
数据库系统的三级模式和二级映射
数据库系统外部的体系结构
数据模型
关系数据库中的关系操作
SQL是什么?它有什么特点?
数据定义之基本表的定义/创建、修改和删除
数据定义之索引的创建、修改与删除
数据查询之单表查询。详细解释WHERE、OEDER BY、GROUP BY 和 HAVING
关系的完整性(实体完整性、参照完整性、用户定义的完整性)
事务(包括事务的基本概念和特性解释)
数据库恢复机制
- 系统文章目录
- 为什么会有数据库并发控制机制
- 并发操作带来的数据不一致性问题有哪些
- 丢失修改
- 不可重复读
- 读“脏”数据
为什么会有数据库并发控制机制
对于允许多个用户同时使用的多用户数据库系统,例如飞机定票数据库系统、银行数据库系统 等等,为了充分利用系统资源,发挥数据库共享资源的特点,允许多个事务并行执行。而保证事务的ACID特性是事务处理的重要任务,而事务的ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。为了保证事务的隔离性和一致性,数据库管理系统必须提供并发控制机制来对并发操作进行正确的调度。
并发操作带来的数据不一致性问题有哪些
并发操作带来的数据不一致性包括
- 丢失修改
- 不可重复读
- 读“脏”数据。
丢失修改
这里通过一个例子来详细说明。
下面是飞机订票系统中的一个活动序列:
① 甲售票点(事务T1)读出某航班的机票余额A,设A=16;
② 乙售票点(事务T2)读出同一航班的机票余额A,也为16;
③ 甲售票点卖出1张机票,修改余额A←A-1,所以A为15,把A写回数据库;
④ 乙售票点卖出3张机票,修改余额A←A-3,所以A为13,把A写回数据库
最终明明卖出4张机票,数据库中机票余额却只减少3。
出现丢失修改的原因是:两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。
不可重复读
不可重复读是指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。这里T2做的更新操作可以是修改、添加、删除。后两种不可重复读有时也叫做幻影现象。
比如:
读“脏”数据
读“脏”数据是指:事务T1修改某一数据,并将其写回磁盘;事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致。T2读到的数据就为“脏”数据,即不正确的数据 。
比如: