软考数据库第十二章事务管理

软考数据库第十二章事务管理

笔记

12.1事务的基本概念

事务

事务:是一系列的数据库操作,是数据库应用程序的逻辑单位,即应用程序对数据库的操作都应该以事务的方式进行。
事务是一个操作序列,这些操作“要么都做,要么都不做”。
事务定义的语句如下:
(1)BEGIN TRANSACTION:事务开始。
(2)END TRANSACTION:事务结束。
(3)COMMIT:事务提交。该操作表示事务成功地结束,它将通知事务管理器该事务的所有更新操作现在可以被提交或永久地保留。
(4)ROLLBACK:事务回滚。该操作表示事务非成功地结束,它将通知事务管理器出故障了,数据库可能处于不一致状态,该事务的所有更新操作必须回滚或撤销。

SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务,SQL中的Commit work和Rollback work语句之一会结束一个事务。
(1)Commit work:提交当前事务。这意味着该事务所做的更新在数据库中永久保存。一但事务被提交后,一个新的事务自动开始。
(2)Rollback work:回滚当前事务。这意味着将撤销该事务对数据库的更新。
注意:如果事务已经执行了Commit work,就不能再用Rollback来撤销。

事务的特性

事务具4个特性:原子性、一致性、隔离性和持久性。
1、原子性:事务的所有操作在数据库中要么都做要么都不做。
2、一致性:一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而遭受破坏。
3、隔离性:一个事务的执行不能被其他事务干扰。并发事务在执行过程中可能会对同一数据进行操作,这些事务的操作应该不会相互干扰,是相互隔离的。
4、持久性:一个事务一旦提交,它对数据库的改变必须是永久的,即使系统出现故障也是如此。
例:事务是一个操作序列,这些操作 (1) 。“当多个事务并发执行时,任何一个事务的更新操作直到其成功提交前的
整个过程,对其他事务都是不可见的。”这一性质通常被称为事务的 (2) 性质。
(1)A.“可以做,也可以不做”,是数据库环境中可分割的逻辑工作单位
B.“可以只做其中的一部分”,是数据库环境中可分割的逻辑工作单位
C.“要么都做,要么都不做”,是数据库环境中可分割的逻辑工作单位
D.“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位
(2)A.原子性 B.一致性 C.隔离性 D.持久性

事务的状态

•事务是数据库的基本执行单元,如果事务成功执行,则数据库从一个一致状态进入另一个一致状态。如果因为某种原因事务没能成功执行,但其已经对数据库进行了修改,这时候可能会导致数据库处于不一致的状态,需要对事务已经造成的变更进行撤销(回滚)。
1、活动状态:事务的初始状态,事务执行时处于这个状态。
2、部分提交状态:当操作序列的最后一条语句执行后,事务就处于部分提交状态。这时,事务虽然已经完全执行,但由于实际输出可能还临时驻留在内存中,在事务成功完成前还有可能出现硬件故障,因此,部分提交状态并不等于事务成功执行。
3、失败状态:由于硬件或逻辑错误,使得事务不能继续正常执行,事务就进入了失败状态,处于失败状态的事务必须回滚。这样,事务就进入了中止状态。
4、中止状态:事务回滚并且数据库恢复到事务开始执行前的状态。
5、提交状态:当事务成功完成后,称事务处于提交状态。只有事务处于提交状态后,才能说事务已经提交。

事务的状态转换:

在这里插入图片描述

BEGIN TRANSACTION:开始运行事务,使事务进入活动状态
END TRANSACTION:说明事物中的所有读写操作都已完成,使事务进入部分提交状态,把事务的所有操作对数据库的影响存入数据库。
COMMIT:标志事务已经成功地完成,事务中的所有操作对数据库的影响已经安全地存入数据库,事务进入提交状态,结束事务的运行。
ABORT:标志事务进入失败状态,系统撤销事务中所有操作对数据库和其他事务的影响,结束事务的运行。


12.2 数据库的并发控制

主要考点
1、事务调度
2、并发操作带来的问题
3、并发调度的可串行性
4、并发控制技术
5、两段锁协议
6、事务的隔离级别

事务调度

1、串行调度:是指多个事务依次串行执行,且只有当一个事务的所有操作都执行完成才执行另一个事务的所有操作。
例:有两个事务T0和T1,事务T0从账号A转2000元到账号B;事务T1从账号A转20%的款到账号B。T0和T1的定义如下所示

在这里插入图片描述

在这里插入图片描述

2、并发调度:利用分时的方法同时处理多个事务

在这里插入图片描述

3、可恢复调度:
指满足这样的条件的调度:当事务Tj要读事务Ti写的数据时,Ti事务必须要先于事务Tj提交。

在这里插入图片描述

并发操作带来的问题

并发操作带来的数据不一致性有三类:丢失修改、不可重复读和读脏数据。
1、丢失修改:两个事务对同一个数据进行修改,导致事务A对数据库的修改被事务B的修改所覆盖。

在这里插入图片描述

2、不可重复读:事务对同一数据进行两次读取的结果不同。原因是两次读取的间隙数据被另一事务修改了。

在这里插入图片描述

3、读脏数据:某事务读取的数据是其它事务修改后的值,但该修改后来又被撤销了。
在这里插入图片描述

并发调度的可串行性
  • 多个事务的并发执行是正确的,当且仅当其结果与某一次序串行地执行它们的结果相同,称这种调度策略是可串行化的调度。
  • 可串行性是并发事务正确性的准则。即:一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。

这两句话熟读甚至背下来

并发控制技术

并发事务如果对数据读写时不加以控制,会破坏事务的隔离性和一致性。为了保持事务的隔离性,系统必须对事务之间的相互作用加以控制,最典型的方式就是加锁。
1、排它锁(Exclusive Locks, 简称X锁):也称为写锁,用于对数据进行写操作时进行锁定。如果事务T对数据A加上X锁后,就只允许事务T对数据A进行读取和修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的锁。
2、共享锁(Share Locks, 简称S锁):也称为读锁,用于对数据进行读操作时进行锁定。如果事务T对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据A上有了S锁,任何事务都只能再对其加S锁读取而不能加X锁修改

封锁协议

(1)一级封锁协议:是指事务T在修改数据A之前必须先对其加X锁,直到事务结束才释放X锁。解决了丢失修改的问题。
(2)二级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,读完后即可释放S锁。解决了读脏数据的问题。
(3)三级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,直到事务结束才释放S锁。解决了不可重复读的问题。

封锁协议 要求 可解决
一级封锁协议 修改前加X锁,事务结束后释放 丢失修改
二级封锁协议 在一级之上再规定:读取前加S锁,读完后释放 丢失修改、读脏
三级封锁协议 在一级之上再规定:读取前加S锁,事务结束后释放 丢失修改、读脏,不可重复读
两段锁协议

两段锁协议(2PL):是指同一事务对任何数据进行读写之前必须对该数据加锁;在释放一个封锁之后,该事务不再申请和获得任何其他封锁。
所谓“两段”的含义是:事务分为两个阶段。第一阶段是获得封锁,也称为扩展阶段。第二阶段是释放封锁,也称为收缩阶段。
例:
T1:Slock A…Slock B…Xlock C…Unlock B…Unlock A…Unlock C
T2:Slock A…Unlock A…Slock B…Xlock C…Unlock C…Unlock B
如果事务遵循两段锁协议,那么它们的并发调度是可串行化的。两段锁是可串行化的充分条件,但不是必要条件。即:遵循两段锁协议,一定是可串行化的;不遵循两段锁协议,可能是可串行化的,也可能不是。
注意:采用两段锁协议也有可能产生死锁,这是因为每个事务都不能及时解除被封锁的数据,可能会导致多个事务都要求对方已经封锁的数据而不能继续运行。

​ PS:熟读甚至背下来

事务的隔离级别

1、READ UNCOMMITTED(读未提交):可避免丢失修改。
2、READ COMMITTED(读已提交):可避免丢失修改、读脏数据。
3、REPEATABLE READ(可重复读):可避免丢失修改、读脏数据,不可重复读。
4、SERIALIZABLE(串行化):最高级别,可避免丢失修改、读脏数据、不可重复读、幻读。
幻读:事务A查询得到N条数据,然后事务B又插入了M条数据,或者改变了这N条数据之外的M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。


12.3 数据库的备份与恢复

主要考点
1、数据库系统故障种类
2、数据库备份
3、数据库恢复

数据库系统故障的种类

1、事务故障:是由于程序执行错误而引起事务非预期的、异常终止的故障。通常有如下两类错误引起事务

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值