一、事务
1. 事务的定义
事务是一个操作序列,这些操作**“要么都做,要么都不做”**,是数据库环境中不可分割的逻辑工作单位。
注意: 一个程序中可以包含多个事务。
2. 事务定义的语句
BEGIN TRANSACTION; -- 开始事务
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
3. 事务的ACID性质
| 性质 | 英文 | 说明 |
|---|---|---|
| A | 原子性(Atomicity) | 事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做 |
| C | 一致性(Consistency) | 事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态 |
| I | 隔离性(Isolation) | 一个事务的执行不能被其他事务干扰 |
| D | 持久性(Durability) | 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的 |
二、并发控制
1. 并发操作带来的问题
- 丢失修改:两个事务同时修改同一数据,一个事务的修改被另一个事务覆盖
- 不可重复读:同一事务内多次读取同一数据,结果不一致
- 读"脏"数据:读取了未提交事务修改的数据
2. 封锁
封锁是实现并发控制的主要技术。
封锁类型:
| 封锁类型 | 说明 |
|---|---|
| 排他锁(X锁) | 又称写锁,事务对数据加X锁后,其他事务不能再对该数据加任何锁 |
| 共享锁(S锁) | 又称读锁,事务对数据加S锁后,其他事务只能对该数据加S锁,不能加X锁 |
封锁协议:
- 一级封锁协议:事务在修改数据前必须先加X锁,直到事务结束才释放。可防止丢失修改。
- 二级封锁协议:在一级封锁协议基础上,事务在读取数据前必须先加S锁,读完后即可释放。可防止丢失修改和读"脏"数据。
- 三级封锁协议:在一级封锁协议基础上,事务在读取数据前必须先加S锁,直到事务结束才释放。可防止丢失修改、读"脏"数据和不可重复读。
三、数据库备份与恢复
1. 备份
备份类型:
| 备份类型 | 说明 |
|---|---|
| 完全备份 | 备份整个数据库 |
| 增量备份 | 只备份自上次备份以来发生变化的数据 |
| 差异备份 | 只备份自上次完全备份以来发生变化的数据 |
备份策略:
- 定期完全备份 + 增量备份
- 定期完全备份 + 差异备份
2. 恢复
恢复技术:
- 数据转储(备份)
- 登记日志文件
恢复策略:
- 事务故障恢复:利用日志文件撤销(UNDO)事务
- 系统故障恢复:撤销未完成事务,重做已完成事务
- 介质故障恢复:重装数据库,重做已完成事务
四、分布式数据库
1. 分布式数据库的特点
| 特点 | 说明 |
|---|---|
| 分布性 | 数据在不同场地上的存储 |
| 共享性 | 数据存储在不同的结点数据共享 |
| 自治性 | 每结点对本地数据都能独立管理 |
| 可用性 | 当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪 |
2. 分布式数据库的透明性
| 透明性 | 说明 |
|---|---|
| 分片透明 | 指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的 |
| 复制透明 | 指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的 |
| 位置透明 | 指用户无须知道数据存放的物理位置 |
| 逻辑透明 | 指用户或应用程序无需知道局部场地使用的是哪种数据模型 |
五、完整性约束总结
1. 实体完整性
- 主键属性不能取空值
- 保证每个实体都是可区分的
2. 参照完整性
- 外键要么取空值,要么等于被参照关系中某个元组的主键值
- 保证数据的一致性
3. 用户定义完整性
- 针对某一具体应用的数据必须满足的语义要求
- 例如:年龄必须在0~150之间
评论