数据库完整性
完整性是为了防止合法用户在使用数据库时向数据库中加入不符合语义的数据
实体完整性 | 实体完整性约束时通过主码的定义来实现的,使用PRIMARY KEY来定义,对于单个属性的主码可以使用列级完整性约束,若主码是一个属性组,则只可以使用表级完整性约束,即PRIMARY KEY(A,B,C) |
完整性检查 | ①检查主码是否唯一,不唯一拒绝插入;②检查主码的各个属性是否为空值,空值拒绝插入 |
参照完整性 | 也称引用完整性,就是外码 |
完整性检查 | ①拒绝执行;②级联操作,删除或者修改参照关系(有外键的这个表)中所有导致不一致的元组;③将参照关系的不一致的元组设置为空值 |
用户完整性 | ①不许取null;②唯一UNIQUE;③检查列值是否满足条件CHECK |
完整性检查 | 不满足就拒绝执行 |
数据库安全性
安全性是为了防止非法用户使用数据库
用户标识和鉴别 | 口令鉴别;生物特征鉴别;智能卡鉴别 |
存取控制 | 两个要素:数据库对象、操作类型 自主存取控制:授权GRANT;收回REVOKE; 强制存取控制:密级,许可证,主客体 |
视图机制 | 常常采用视图+授权机制相结合 |
安全审计 | 审计功能就是将用户对数据库的所有操作自动记录下来,放入审计日志中 AUDIT是设置审计功能,NOAUDIT是取消审计功能 |
数据加密 | 就是加密 |
事务管理
概念 | 事物是指用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位 |
特性 | 原子性、一致性、隔离性、持续性 |
并发控制
概念
并发操作要加以控制,不然会产生数据的不一致性,主要表现为:丢失修改、不可重复读、读“脏”数据
丢失修改 | 两个事务同时修改,后一个覆盖了前一个事务的修改 |
不可重读性 | 第一个事务读取数据,第二个事务修改了数据吗,使得第一个事务无法再现读取结果 |
读“脏”数据 | 第一个事务将数据写入磁盘,然后撤销了,第二个事务读取的数据就与数据库不一致 |
封锁
普遍采用的并发控制方式就是封锁
排他锁 | 简称X锁,也称写锁,不允许其他事务对其封锁的对象进行读取和修改 |
共享锁 | 简称S锁,也称读锁,只允许其他事务对其封锁的对象进行读取,不许修改 |
封锁粒度
封锁对象的大小成为封锁粒度,风多的粒度越大,开销越小,但并发性越低;封锁粒度越小,封锁的开销越大,但并发性越高
活锁和死锁
避免活锁的方式是先来先服务的策略
预防死锁就是破坏产生死锁的条件,通常有一次封锁法和顺序封锁法
死锁的诊断:超时法和等待图法
死锁的解除:撤销一个代价最小的事务,释放其所有的锁
并发调度的可串行性
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度
两段锁协议
简称2PL协议,是为了保证并发调度的可串行性而提出的封锁协议,分为两个阶段:获得封锁,也称扩展阶段;释放封锁,也称收缩阶段
事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件,即可串行化调度中不一定所有事务都符合两段锁协议
数据库的备份与恢复
故障的种类 | 事务故障、系统故障、介质故障、计算机病毒 |
数据库备份分类 | 完全备份,差异备份,增量备份,按需备份; 物理备份:冷、热备份,逻辑备份 |
故障恢复的实现技术 | 数据库故障恢复是建立冗余数据,并利用这些冗余数据恢复数据库的过程,常用技术是数据转储和登记日志文件 |
故障恢复策略 | 事务故障恢复;系统故障恢复;介质故障恢复 |