数据库完整性概述
9.1 数据库完整性概述
数据库完整性–数据的正确性,有效性,西安共性
列级约束
对属性的数据类型,等的定义
元祖约束
元组中各个属性之间的约束关系
实现完整性约束的方法
- 提供定义机制
- 提供检查方法
- 违约处理
9.4用户定义的完整性
9.5触发器
一类用户定义在关系数据表上的一类由事件驱动的特殊过程,用编程的方法实现复杂的业务规则
是一种特殊类型的存储过程
可用触发器完成很多数据库完整性保护的过程
- 复杂的业务规则
- 比较数据修改前后状态
SQL:CREATE TRIGER命令
事务
原子性:不可分割
一致性:事务执行结果必须从一个状态转换到另一个状态时保持一致,即若中间出现错误,则将所有操作撤销
事务应当具有ACID性质,
A是原子性(atomic):事务中包含的各项操作必须全部成功执行或者全部不执行。任何一项操作失败,将导致整个事务失败,其他已经执行的任务所作的数据操作都将被撤销,只有所有的操作全部成功,整个事务才算是成功完成。
C是一致性(consistent):保证了当事务结束后,系统状态是一致的。那么什么是一致的系统状态?例如,如果银行始终遵循着”银行账号必须保持正态平衡”的原则,那么银行系统的状态就是一致的。上面的转账例子中,在取钱的过程中,账户会出现负态平衡,在事务结束之后,系统又回到一致的状态。这样,系统的状态对于客户来说,始终是一致的。
I是隔离性(isolated):使得并发执行的事务,彼此无法看到对方的中间状态。保证了并发执行的事务顺序执行,而不会导致系统状态不一致。
D是持久性(durable):保证了事务完成后所作的改动都会被持久化,即使是发生灾难性的失败。可恢复性资源保存了一份事务日志,如果资源发生故障,可以通过日志来将数据重建起来。
事务应处在下列状态之一
活动状态
失败状态:意味着要回滚
中止状态:数据库已经回滚完毕,恢复到提交前状态
提交状态:当数据更改完全写入磁盘时,进入提交状态
10.3.1事务故障的恢复
1.反向扫描日文件日志,查找该事务的更新操作
2.对该事务的更新操作执行你操作
3.继续反向扫描,直到读到此事务的开始操作
10.3.2系统故障恢复
1.正向扫描日志文件,列出Redo队列,Undo队列
日志
<u>
登记两条原则 </u>
<u>
1.登记次序严格按并行事物执行顺序 </u>
<u>
2.先写日志文件,后写数据库 </u>