微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【数据库复习 11】

第十一章 事务处理

1.构成单一逻辑工作单元的操作集合称作事务,事务是访问并可能更新各种数据项的一个程序单元。
(1)原子性:事务的所有操作在数据库中要么全部反应,要么全不反映。
(2)一致性:隔离执行事务时,保持数据库的一致性。
(3)隔离性:并发事务的执行
(4)持久性:一个事务成功完成后,它对数据库的改变必须是永久的,即使系统出现故障。
2.事务运用以下两个操作访问数据:
·read(X) 从数据库吧数据项X传送到执行read操作的事务的主存缓冲区
·write(X) 从执行write的事务的主缓冲区的变量X中把数据项X传回数据库
确保隔离性是数据库系统中称作并发控制系统的部件控制的。
3.事务的状态:
·活动的:初始状态,事务执行时处于这个状态
·部分提交的:最后一条语句执行后
·失败的:发现正常的执行不能继续后
·中止的:事务回滚并且数据已经恢复到事务开始执行前的状态后
·提交的:成功完成后

Alt

4.系统判定事务不能继续正常执行后,事务就进入失败状态。这种事务必须回滚。这样,事务就进入中止状态,此刻,系统有两种选择:
·重启事务,当且仅当事务中止是硬件错误而不是由事务的内部逻辑所产生的的软件错误引起,重启的事务被看成一个新事务。
·杀死事务,通常由于事务的内部逻辑造成。
5.可串行化:
当I和J是不同事务在相同的数据项上的操作,并且其中至少有一个是write指令时,我们说I与J是冲突的。
假设I和J是调度S的两条连续指令。若I和J是属于不同事务的指令且不冲突,则可以交换I与J的顺序得到一个新的调度S’。S与S’等价。
如果调度S可以经过一系列非冲突指令交换转换成S’我们称S和S’是冲突等价的。如果一个调度S与一个串行调度冲突等价,则称调度S是冲突可串行化的。

Alt


*如果调度S的优先图有环,则调度S是非冲突可串化的。

6.可恢复调度:对于每个事务Ti和Tj,如果Tj读取了之前由Ti所写的数据项,则Ti先于Tj提交。
级联回滚:因单个事务故障导致一系列事务回滚的现象称为级联回滚。
无级联调度应满足:对于每个事务Ti和Tj,如果Tj读取了先前有Ti所写的数据项,则Ti必须在Tj这一读操作前提交。

7.事务隔离性级别:
sql规定的隔离性级别如下:
·可串行化 通常保证可串行化调度
·可重复读 只允许读已提交数据,但一个事务两次读取一个数据项期间,其他事务不得更新该数据。
·已提交读:只允许读已提交的数据,但不要求可重复读。例如一个事务两次读取某个数据项
·未提交读:允许读取未提交数据。
以上所有隔离性级别都不允许脏写,即如果一个数据项已经被另外一个尚未提交或中止的事务写入,则不允许对该数据项执行写操作。
*幻读:在两次查询之间执行insert从而导致第二次查询结果多出来若干记录的现象。
8.隔离性级别的实现:
(1)锁:共享锁用于事务读的数据项,而排它锁用于事务写的数据项
(2)时间戳:对于每个数据项,系统维护两个时间戳(最近读时间戳和最近写时间戳)
(3)多版本和快照隔离:通过维护数据项的多个版本,一个事务允许读取一个旧版本的数据项。

原文地址:https://www.jb51.cc/wenti/3281523.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐