目录
一、事务概述
1.1定义
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单元
事务是并发控制的基本单位,是数据库恢复的基本单位,是数据库的逻辑基本逻辑单元
数据库恢复机制和并发控制机制是数据库管理系统的重要组成部分
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序
--显式定义事务
begin transaction
SQL 语句1
…… ……
commit / rollback
/*
commit
事务正常结束
提交事务的所有操作(读+更新)
事务中所有对数据库的更新写回到磁盘上的物理数据库中
rollback
事务异常终止
事务运行的过程中发生了故障,不能继续执行
系统将事务中对数据库的所有已完成的操作全部撤销
事务滚回到开始时的状态
*/
--将数学课程号由2修改为22
/*
解析:
所涉及的关系:Course和SC,根据参照完整性约束,应将两表中的2都改为22。要将修改两个表的两个SQL语句定义成一个事务。因为DBMS对这两个语句要么都执行,要不都不执行
*/
begin transaction
update Course set CNO='22' where CNO='2'
update SC set CNO='2' where CNO='22'
commit
1.2特性
原子性
- 事务是数据库的逻辑工作单元
- 事务的所有操作要么都全部成功地执行,要么都不执行
- 若事务因故障而中止,则要设法消除该事务所产生的影响,使数据库恢复到该事务执行前的状态
一致性
- 事务执行的结果必须使数据库从一个一致性状态转变到另一个一致性状态
隔离性
- 一个事务的执行不能被其他事务干扰。多个事务并发执行,任何事物的更新操作直到其成功提交,对其他事务都是不可见的
持久性
- 一个事务完成后,它对数据库的改变必须是永久的,即使系统出现故障,它对数据库的更新也将永久有效
二、并发控制概述
事务的并发执行是数据库系统提高系统效率的有效方法,但可能破坏事务的 ACID性质,导致数据的不一致性
2.1事务的并发执行
1、并发执行的理由
- 提高吞吐量和资源利用率
- 减少等待时间
2、并发执行方式
- 交叉并发方式
- 单机系统中,事务的并行操作轮流交叉运行
- 优点:能够减少处理机的空闲时间,提高系统的效率
- 缺点:不是真正的并发操作,可能会产生数据不一致
- 同时并发方式
- 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行
- 优点:最理想的并发方式
- 缺点:受制于硬件环境,同样可能会产生数据不一致
2.2并发执行导致的问题
2.2.1丢失修改
2.2.2读“脏”数据
2.2.3不可重复读
产生原因
- 事务T1读取某一数据后,事务T2对其做了修改,事务T1再次读取该数据时,发现与前次不同
- 事务T1按一定条件读取了某些数据记录后,事务T2删除了其中的部分记录,事务T1再次按相同条件读取记录时,发现有些记录不存在
- 事务T1按一定条件读取了某些数据记录后,事务T2插入了一些记录,事务T1再次按相同条件读取记录时,发现多了一些记录
例:飞机订票系统中的一个活动序列
①甲售票点(事务T1)读出某航班的机票余额A,设A=16;
②乙售票点(事务T2)读出同一航班的机票余额A,也为16;
③甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;
④乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库
结果明明卖出两张机票,数据库中机票余额只减少1
这种情况称为数据库的不一致性,是由并发操作引起的
在并发操作情况下,对T1、T2两个事务的操作序列的调度是随机的。若按上面的调度序列执行,T1事务的修改就被丢失。原因:第4步中T2事务修改A并写回后覆盖了T1事务的修改
产生上述三类不一致性的主要原因就是并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使某个事务的执行不受其它事务的干扰
并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制
三、封锁
封锁即事务在对某个数据对象操作之前