zoukankan      html  css  js  c++  java
  • 事务

    事务的四大特性

      原子性

      一致性:数据库从一个一致性状态到另一个一致性状态

      隔离性:各个事务之间是互不干扰的。

      持久性:对数据库中数据的改变是持久的。

    并发控制机制

      事务是并发控制的基本单位。

      并发操作带来的问题:丢失修改,不可重复读,读脏数据

      并发操作会破坏事务的隔离性,并发控制机制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰。

         另一方面,有时候应用对统计精度没有影响,这时可以降低一致性的要求以减少系统开销。

      并发控制的主要技术:封锁,时间戳,客观控制法,多版本并发控制。

     (一)封锁

           写锁(排它锁):事务T对数据对象A加上X锁,则只允许事务T修改和读取A。其他任务事务都不能对A加任何类型的锁。

      读锁(共享锁):事务T对数据对象A加上S锁,则事务T可以读A,但是不能修改A。其他事务可以加S锁。

     (二)封锁协议

      1.一级封锁协议

      事务在修改数据之前必须对其加X锁,直到事务结束才释放。

      2.二级封锁协议

      在一级锁基础上,增加事务在读取数据之前必须先加S 锁,读完即可释放S锁。

      3.三级封锁协议

      在一级锁基础上,增加事务在读取数据之前必须先加S锁,事务结束才释放

     (三)活锁与死锁

      活锁:饥饿

      死锁:相互等待相互的资源

     (四)可串行化调度

      可串行化调度:多个事务并发执行,和串行执行的结果相同。

      可串行化是并发事务正确调度的准则。

      冲突可串行化调度:一个调度在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度,且这个调度是串行的。

      冲突可串行化是可串行化调度的充分条件

     (五)两段锁协议

      数据库的并发控制,通过两段锁协议,来实现可串行化调度。

      事务遵守两段锁协议是可串行化调度的充分条件

      所谓的两段锁,第一段是扩展段,这个阶段获得封锁,但是不释放锁;第二段是收缩段,这个阶段释放封锁,但是不申请锁。

     (六)意向锁

      封锁粒度不同,产生多粒度树。多粒度树的根节点是整个数据库,表示最大的数据粒度。

      多一个结点加锁,意味着这个结点的所有后裔结点都被加了同类型的锁。

      一般对某个对象加锁,要检查所有上下级所有结点,是否显示加锁,或者隐式加锁,是否有冲突。

      因此引入了意向锁。

      意向锁的定义是如果对一个结点加意向锁,说明该结点的下层结点正在被加锁。对一个结点加锁时,必须对它的上层结点加意向锁。

      

  • 相关阅读:
    TP-LINK,TL-WR885路由器无线桥接方法
    python3 urllib.request.Request的用法
    requests模块
    python3中引入扩展包时的几个注意事项
    Flask-sqlacodegen之ORM操作
    mysql ERROR 1049 (42000): Unknown database '******' ”错误处理办法
    Python各种包下载路径
    python在Apache中的部署
    Python3 基于 Nginx或Apache 部署 Django 项目
    Python如何发布程序
  • 原文地址:https://www.cnblogs.com/juanzhi/p/12449830.html
Copyright © 2011-2022 走看看