数据库系统原理

一、事务

满足ACID特性的一组操作。

ACID

各个特性之间的关系。

  • Mysql是AUTO COMMIT

二、并发一致性问题

  • 丢失修改
  • 读脏数据
  • 不可重复读
  • 幻影读
    读取范围数据。

产生原因:破坏了事务的隔离性。
解决:并发控制。加锁。
对此:数据库提供了不同的隔离级别,简化

三、封锁

封锁粒度

  • 行级锁
  • 表级锁
    封锁粒度和效率之间tradeoff。

封锁类型

    1. 读写锁
    1. 意向锁
  • 目的:更容易的支持多粒度封锁。

  • IX/IS 都是表锁

封锁协议

  1. 三级封锁协议
  2. 两段锁协议

MySQL的隐式与显示锁定

隔离级别

未提交读

提交读

可重复读

可串行化

不同的封锁强度-》不同的隔离级别-》解决不同程度的并发一致性问题

多版本并发控制

基本思想

类似copy on write。
在 MVCC 中事务的修改操作(DELETE、INSERT、UPDATE)会为数据行新增一个版本快照。

版本号

系统版本号 SYS_ID:是一个递增的数字,每开始一个新的事务,系统版本号就会自动递增。
事务版本号 TRX_ID :事务开始时的系统版本号。

Undo日志

readview

当前未提交事务列表
判断数据行快照是否可以使用。
在数据行快照不可使用的情况下,需要沿着 Undo Log 的回滚指针 ROLL_PTR 找到下一个快照,再进行上面的判断。

快照读与当前读

避免了 SELECT 的加锁操作。

Next-Key Locks

record locks

gap locks

next-key locks

目的:MVCC 不能解决幻影读问题,Next-Key Locks 就是为了解决这个问题而存在的。在可重复读(REPEATABLE READ)隔离级别下,使用 MVCC + Next-Key Locks 可以解决幻读问题。

锁定一个记录上的索引,而不是记录本身。

关系数据库设计理论

函数依赖
部分决定,传递。
键码与非键码属性之间的关系。

异常

  1. 冗余数据
  2. 修改异常
  3. 删除异常
  4. 插入异常
    增删查改快记。

范式

范式理论是为了解决以上提到四种异常。

ER图

实体的三种联系
表示出现多次的关系
联系的多向性
表示子类

Entity-Relationship,有三个组成部分:实体、属性、联系。

用来进行关系型数据库系统的概念设计。

参考

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

相关阅读更多精彩内容

友情链接更多精彩内容