【BUAA-数据管理技术】10-事务管理

本文内容系2024年北航软件学院数据管理技术课程课堂笔记,内容大部分取自课程PPT,少量来源于互联网,若有侵权请联系删除。文章内容如有错漏,敬请批评指正!

第八章 并发控制

10 - 事务管理

8.1 并发控制

数据资源共享,为了充分利用数据库资源,数据库用户对数据库系统并行存取数据

数据库的一致性:在任何时刻用户面对的数据库都是符合现实世界的语义逻辑的

  • 多个用户并发存取同一数据块时,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的一致性
  • DBMS必须对并发操作进行控制,避免破坏数据一致性
  • 数据库并发控制以事务为基本单位进行,对事务所操作的数据施加封锁来实现一致性
    • 这种数据一致性约束属于动态关系约束

8.2 事务(Transaction)

事务:用户定义的一个数据库操作序列,是不可分割的工作单位(要么全做,要么全不做)

事务和程序是两个概念:

  • 一个事务可以是一条或一组连续的SQL语句
  • 一个对数据库进行操作的应用程序可以包含多个事务,这些事务是串行的

事务开始与结束可由用户显式控制,若用户未显示定义,则由DBMS按照缺省规定自动划分事务

用户自定义的事务:以Begin transaction开始,以CommitRollback结束。

  • commit:事务的提交,将事务中所有对数据库的更新写回磁盘上的物理数据库中,此时事务正常结束
  • rollback:事务的回滚,即事务运行过程中发生故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态

例:事务开始 -> 系统在A账户删除100元 -> 系统在B账户增加100元 -> 事务结束

BEGIN TRANSACTION
    READ A
    A = A - 100
    IF A < 0 THEN	/* A款不足 */
        BEGIN
            DISPLAY "A款不足"
            ROLLBACK
        END
    ELSE			/* 拨款 */
        BEGIN
            READ B
            B = B + 100
            DISPLAY "拨款完成"
            COMMIT
        END

事务:并发控制的基本单位,遇到数据库错误后进行数据恢复的处理单位

事务由有限的数据库操作序列组成,但并非任意数据库操作序列都能成为事务,需要有如下4个特征。

8.2.1 ACID特征

原子性(Atomicity)
  • 事务中包含的所有操作要么全做,要么全不做
  • 系统应保证只执行了一部分的事务不会对数据库状态产生影响(钱打了一半出现错误,账户钱不能少)
隔离性(Isolation)
  • 并发执行的各个事务之间不能互相干扰
  • 一个事务内部的操作及使用的数据对其他并发事务是隔离
  • 每个事务在执行的时候应感觉不到其他事务的存在
一致性(Consistency)
  • 是原子性和隔离性的结果
  • 数据库在事务执行前是一致的,执行过程中可能暂时出现不一致,而当事务执行完后,数据库仍会处于一致性状态
持久性(Durability)
  • 一个事务一旦提交(commit)之后,它对数据库的影响必须是永久的。系统发生失效不能改变事务的持久性。

8.2.2 事务的状态

在这里插入图片描述

数据库的恢复机制保证了原子性和持久性的实现

  • 一种简单的恢复机制: shadow-database影子数据库技术

    • 假定同时只有一个事务是活动的(不存在隔离性问题)

    • 对数据库的更新都在影子数据库上进行。当事务更新都完成后,数据库指针db-pointer指向影子数据库,将之变成当前数据库。若事务出现错误,则删除影子数据库

  • 恢复机制不能解决事务并发执行情况下的数据一致性、隔离性问题

8.2.3 事务的并发执行

  • 当同一数据库系统中有多个事务并发运行时,如果不加以适当控制,可能会破坏事务的隔离性,产生数据的不一致性。

  • 并发操作带来的数据一致性——丢失修改、不可重复读、读脏数据

  • 优点:

    • 提高系统吞吐量
    • 减少平均响应时间
1. 丢失修改(lost update)——写写冲突
  • 事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。也称脏写(dirty write)——写写冲突

    T 1 T_1 T1 T 2 T_2 T2
    A = 16 A=16 A=16
    A = 16 A=16 A=16
    A = A − 1 A = A - 1 A=A1;写 A = 15 A=15 A=15
    A = A − 1 A = A - 1 A=A1;写 A = 15 A=15 A=15
2. 不可重复读(non-repeatable read)——读写冲突
  • 指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果

  • 三种情况:事务1读取某一数据后,

    1. 事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值