14事务

来源:互联网 发布:双代号网络时间参数 编辑:程序博客网 时间:2024/05/20 13:18

事务

访问并可能更新各种数据项的一个程序执行单元

事务与程序比较

  • 一个事务可以是一条或多条SQL语句,也可以是整个程序
  • 一个程序通常包含多个事务

ACID特性

  • 原子性(Atomicity)
    • 事务的操作在数据库中要么全部反映,要么完全不反映
    • 由恢复系统的组件处理
  • 一致性(Consistency)
    • 隔离执行事务时,保持数据库的一致性
    • 确保单个事务的一致性是编写该事务的程序员的责任
    • 完整性约束的自动检查给这项工作带来了便利
  • 隔离性(Isolation)
    • 每个事务都感觉不到系统中有其他的事务并发执行
    • 由并发控制系统的部件处理
  • 持久性(Durability)
    • 事务成功完成后,对数据库的改变必须是永久的,即使出现系统故障
    • 由恢复系统的组件处理

事务状态

  • 活动的:初始状态,事务执行时处于这个状态
  • 部分提交的:最后一句语句执行后
  • 失败的:发现正常的执行不能继续后
  • 终止的:事务回滚并且数据库已恢复到事务开始执行前的状态后
  • 提交的:事务完成后
    这里写图片描述

系统判定事务不能继续执行后,事务进入失败状态,事务必须回滚,事务就进入终止状态,此刻系统有两种选择

  • 重启事务。但仅当引起事务中指的是硬件错误或不是由事务的内部逻辑所产生的软件错误时。重启的事务可以看作一个新事务
  • 杀死事务。通常是由于事务的内部逻辑造成的错误,只有重写应用程序才能改正,或者由于输入错误,或所需的数据在数据库中没有找到

调度

指令在系统中的执行的时间顺序
一组事务的一个调度必须包含这一组事务的全部指令,并且必须保持指令在各个事务中出现的顺序
当调度在某种意义上等价于一个串行调度,这种调度称为可串行化调度

冲突

IJ是不同事务在相同数据项上的操作,并且其中至少有一个是write指令,IJ是冲突的
如果调度S可以经过一系列非冲突指令交换转换成S,称SS冲突等价
如果调度S于一个串行调度冲突等价,则称调度S冲突可串行化

优先图

G=(V,E)V是顶点集,由所有参与调度的事务组成,E是边集,由满足下列三个条件之一的边TiTj组成
- 在Tj执行read(Q)之前,Ti执行write(Q)
- 在Tj执行write(Q)之前,Ti执行read(Q)
- 在Tj执行write(Q)之前,Ti执行write(Q)

这里写图片描述
如果优先图存在边TiTj,则在任何等价于S的串行调度S中,Ti出现在Tj之前
如果调度S的优先图有环,则调度S是非冲突可串行化的,如果无环,则调度S是冲突可串行化的

可恢复调度

满足:对于每对事务TiTj,如果Tj读取了之前由Ti所写的数据项,则Ti先于Tj提交


回滚

  • 级联回滚:因为单个事务故障导致一系列事务回滚
  • 无级联回滚:必须满足对于每对事务TiTj,如果Tj读取了之前由Ti所写的数据项,则Ti必须在Tj这一读操作之前提交

事务隔离性级别

  • 可串行化:通常保证可串行化调度
  • 可重复读:只允许读取已提交的数据,而且在一个事务两次读取一个数据项期间,其他事务不得更新该数据,但该事务不要求与其他事务可串行化
  • 已提交读(默认):只允许读取已提交的数据,但不要求可重复读
  • 未提交读:允许读取未提交的数据
0 0