zoukankan      html  css  js  c++  java
  • 数据库并发操作

    事物的特性

    1,原子性--事物中包含的所有操作要么全做,要么全部做(由恢复机制实现)

    2,一致性--事物的隔离执行必须保证数据库的一致性,事物开始前,数据库保持一致性,
    事物结束后仍保持一致性,(由用户来负责,由并发机制实现)、
    3,隔离性--系统必须保证事物不受其他并发执行事物的影响,对任意一对事物T1,T2
    要么T1在T2执行结束之前执行,要么在T1完成之后开始执行,(通过并发控制机制实
    现)
    4,持续性--一个事物一旦提交之后,他对数据库的影响必须是永久的
    系统发生故障不能改变事物的持久性(恢复机制实现)


    事物的操作组成
    1,事物开始
    begin transaction 事物开始
    2,事务读写操作
    read/write transaction 事物进行数据操作
    3,事物提交
    commit transaction 事务完成所有数据操作,同时保存操作结果,它标志着事物成功完成
    4,事务回滚
    rollback transcaction事物未完成所有数据操作,重新返回事务开始状态,标志着事物的撤销

    并发操作与数据的一致性
    并发操作带来数据不一致的三种情况
    1,丢失修改
    2,读过时数据
    3,读脏数据

    排它锁,共享锁
    如果事务T对数据对象Y加上了排它锁,那么T即可以读取Y也可以更新Y
    如果事务T对数据对象Y加上了共享锁,那么T可以读取Y,但不能更新Y

    一次加锁锁住的数据大小被称为锁的颗粒
    如果单元小,则该锁是 细粒度
    如果单元大,则该锁是 粗粒度


    封锁协议 --是对数据对象加锁,持锁和释放锁时约定的一些规则,不同的锁规则形成了不同的封 锁协议
    1级封锁协议
    规定事务T在事务更新数据对象之前,必须对该数据对象加排他锁,并且直到事务T结束时 才可以释放该锁

    利用一级封锁协议可以防止丢失更新问题的发生

    2级封锁协议
    规定事务T在更新数据对象之前,必须对数据加X锁,且直到事务T结束时才可以释放该 锁,还规定事务T在读取数据对象之前必须先对其加S锁,读完后释放S锁

    防止丢失更新问题,还可以防止未提交以来问题,但却不能防止不一致性分析问题

    3级封锁协议
    规定事务T在更新数据对象前,必须对数据对象加X锁,且直到事务T结束才可以释放该锁 ,还规定事务T在读取数据对象之前必须先对其加S锁,该S锁也必须在事务T结束才可 以释放

    三级封锁协议可以防止丢失更新和未提交依赖问题,还可以防止不一致性分析问题的发生 ,但却带来了其他问题,死锁和活锁

    死锁和活锁
    在多个事务并发执行的过程中,可能会存在某个尽管总有机会获得锁的事务却永远也没有得到锁,这种情况称为活锁
    多个并发事务处于等待的状态,其中的每一个事务都在等待他们中的另一个事物释放封锁
    这样才可以继续执行下去,但任何一个事物都没有释放自己已获得的锁,也无法获得其他事物已拥有的锁,所以只好相互等待下去

    封锁的预防
    1,每个事物必须一次性将所有使用的数据加锁,或者必须按照一个预先约定的加锁顺序对使用到的数据加锁
    2,每当处于等待状态的事务有可能导致死锁时,就不在等待下去,强行事务回滚

    死锁恢复
    当系统中存在死锁时,一定要解除死锁,具体的方法时从发生死锁的事务中选择一个回滚代价最小的事务,将其彻底回滚,或者回滚到可以解除死锁处,使他的事务可以获得想应的锁,而得以继续运行下去

    事务Ti运行时,有唯一的时间标记,称为时戳,用Ts(Ti)表示,时标技术的基本思想是
    1,每个事物开始执行时,系统为这个事物赋予一个时标,一般为当前时间,称之为启动时间,用TS(Ti)标识
    2,每个事物所进行的每个读写操作,均具有时标属性
    3,系统标识并保存每个有数据项Q的最近读时标R_TM(Q)和写时标W_TM(Q)


    封锁机制
    封锁类型
    1,共享锁,非独占的,允许多个并发事务读取其锁定的资源,数据被读取后,立即释放共享锁,如:select
    2,修改锁,
    3,独占锁,
    4,意向锁

  • 相关阅读:
    观察者模式(Observer)
    外观模式(三层解耦)
    建造者模式(Builder)
    简单工厂
    单例模式(Winform窗体的实现)
    20180213 字符串spilt方法,字符串打包zip方法
    20180212第一发:Python与Json编码解码举例
    Eclipse插件Fat Jar
    java学习之浅谈多线程4SwingWorker
    Android SDK manager 闪退
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3080949.html
Copyright © 2011-2022 走看看