一、事务
满足ACID特性的一组操作。
ACID
各个特性之间的关系。
- Mysql是AUTO COMMIT
二、并发一致性问题
- 丢失修改
- 读脏数据
- 不可重复读
- 幻影读
读取范围数据。
产生原因:破坏了事务的隔离性。
解决:并发控制。加锁。
对此:数据库提供了不同的隔离级别,简化
三、封锁
封锁粒度
- 行级锁
- 表级锁
封锁粒度和效率之间tradeoff。
封锁类型
- 读写锁
- 意向锁
目的:更容易的支持多粒度封锁。
IX/IS 都是表锁
封锁协议
- 三级封锁协议
- 两段锁协议
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 可以解决幻读问题。
锁定一个记录上的索引,而不是记录本身。
关系数据库设计理论
函数依赖
部分决定,传递。
键码与非键码属性之间的关系。
异常
- 冗余数据
- 修改异常
- 删除异常
- 插入异常
增删查改快记。
范式
范式理论是为了解决以上提到四种异常。
ER图
实体的三种联系
表示出现多次的关系
联系的多向性
表示子类
Entity-Relationship,有三个组成部分:实体、属性、联系。
用来进行关系型数据库系统的概念设计。