数据库系统原理概要

事务

  • ACID

    • 原子性

    • 隔离性

    • 一致性

    • 持久性

      • 应对系统崩溃,可以用Redo Log恢复
  • AUTOCOMMIT:MySQL默认采用自动提交,不显示start transaction,每个查询都会被当成一个事务执行并自动提交

并发一致性问题

  • 丢失修改

  • 脏读

  • 不可重复读

  • 幻读

    • insert操作引起

  • 锁粒度

    • 行锁
    • 表锁
  • 锁类型

    • 读写锁

      • 互斥锁(X锁、写锁)
      • 共享锁(S锁、读锁)
      • 一个事务对数据A加了X锁,期间其他事务不能对A加任何锁
        一个事务对数据A加了S锁,其他事务可以对A加S锁,但是不能加X锁
    • 意向锁

      • 可以更容易支持多粒度加锁

      • IX/IS锁,表示一个事务想要再表中的某个数据行上加X/S锁

        • 一个事务再获得某个数据行的S锁之前,必须先获得表的IS锁或更强的锁
        • 一个事务在获得某个数据行的X锁之前,必须先获得表的IX锁
        • 任意IS/IX锁之间都是兼容的
  • 封锁协议

    • 一级:事务T要修改A时必须加X锁,直到T结束才释放(解决丢失修改问题)
    • 二级:在一级基础上事务T要读取A时必须加S锁,读取完立即释放锁(解决脏读问题)
    • 三级:在二级的基础上,要求读取A时必须加S锁,直到事务结束才释放(解决不可重复读问题)
    • 两段锁协议:加锁和解锁分两个阶段进行,保证可串行化调度

事务隔离级别

  • 读未提交(RU)
  • 读提交(RC)
  • 可重复度(RR)
  • 可串行化(Serializable)

多版本并发控制(MVCC)

  • 版本号

    • 系统版本号SYS_ID:每开启一个新事务时递增
    • 事务版本号TRX_ID:事务开启时的系统版本号
  • ReadView

    • 当前系统未提交的事务列表,以及最大ID和最小ID
  • 快照读:SELECT,不需要进行加锁

  • 当前读:INSERT、UPDATE、DELETE,需要加锁

  • SELECT时可以显式指定加锁

    • select * from table where ? lock in share mode;(S锁)
    • select * from table where ? for update;(X锁)

Next-Key Locks

  • 可重复读级别下,使用MVCC+Next-Key Lock可以解决幻读
  • Record Locks: 锁定一个记录上的索引
  • Gap Locks:锁定索引之间的间隙,但是不包括索引本身

关系数据库

  • 异常

    • 冗余数据、修改异常、删除异常、插入异常
  • 范式

    • 为了解决异常
    • 第一范式:属性不可分割
    • 第二范式:非主属性完全依赖于键码
    • 第三范式:非主属性不传递函数依赖于键码

【参考文章】GitHub-CyC2018/CS-Notes

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、事务 满足ACID特性的一组操作。 ACID 各个特性之间的关系。 Mysql是AUTO COMMIT 二、并...
    riverlet阅读 221评论 0 0
  • 本文在学习了数据库库理论后的一个总结,以加深理解、形成知识架构和方便日后复习 本文大部分(包括文章框架、内容和图片...
    stoneyang94阅读 1,249评论 0 2
  • 索引 1. 那你能说说什么是索引吗? 索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据 2. 那么索引...
    Tim在路上阅读 479评论 1 10
  • 一、事务 事务是访问数据库的一个操作序列,数据库通过一系列事务来存取数据。 事务特性ACID:原子性:要么都执行,...
    一只小星_阅读 566评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,991评论 0 5

友情链接更多精彩内容