你的浏览器不支持本网站所要求的功能, 现在看到的是本网站简化版本.

为了获得最佳体验, 请使用最新的Chrome, Safari, Firefox 或 Edge 浏览器.

6. 数据库保护

6.2 数据库完整性

Powered by impress.js
Ver. 2408

### 数据库的完整性 - 数据的正确性: 数据符合现实世界的语义 - 数据的相容性: 同一对象在不同表中的数据符合逻辑 - 旨在防止数据库中存在不符合语义的数据
### 维护数据库完整性 - 提供定义完整性约束条件的机制 - 提供完整性检查的方法 - 进行违约处理
### 完整性检查 - 耗费时间和资源 - 由数据库管理系统实现
### 数据库完整性 - 实体完整性 - 参照完整性 - 用户定义的完整性
### 实体完整性 - 在 CREATE TABLE 语句中使用 PRIMARY KEY 短语 - 在列级别定义约束条件 - 在表级别定义约束条件
### 实体完整性检查 - 主码值是否唯一 - 主码的各个属性是否为空 - 通常会在主码上自动创建索引
### 参照完整性 - 在 CREATE TABLE 语句中使用 FOREIGN KEY 和 REFERENCES 短语 - FOREIGN KEY 指明哪些列是外码 - REFERENCES 指明外码参照了哪些表的主码
### 例 3 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );
### 参照完整性检查 - 例如: - 在 SC 表和 Student 表之间 - Student 删除元组 - Student 修改主码值 - SC 插入元组 - SC 修改外码值
### 违约处理 - 拒绝 (NO ACTION) 执行 - 级联 (CASCADE) 操作 - 设置为空值
### 参照完整性违约处理 - 例如: - 在 SC 表和 Student 表之间 - Student 删除元组 拒绝/级联删除/设置为空值 - Student 修改主码值 拒绝/级联删除/设置为空值 - SC 插入元组 拒绝 - SC 修改外码值 拒绝
### 创建参照表时明确指定 CREATE TABLE SC ( Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION ON UPDATE CASCADE );
### 用户定义的完整性 - 针对特定应用中数据必须满足的语义要求 - DBMS 提供了定义和检验这类完整性的机制
### 属性上的约束条件 - 在 CREATE TABLE 语句中定义 - 列值非空 (NOT NULL) - 列值唯一 (UNIQUE) - 检查列值是否满足条件表达式 (CHECK)
### 例 8 改 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT CHECK (Grade >= 0 AND Grade <= 100), PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );
### 属性上约束条件的检查 - 在插入元组或修改属性值时检查 - 如不满足则拒绝执行
### 元组上的约束条件 CREATE TABLE Student ( Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex = '女' OR Sname NOT LIKE 'Ms.%') ); - 在CREATE TABLE语句中使用CHECK短语
### 元组上约束条件的检查 - 在插入元组或修改属性值时检查 - 如不满足则拒绝执行
![course 6.2 mindmap](img/c06/mindmap-6-2.png)
### 6.2 数据库完整性 - 什么是数据的正确性和数据的相容性? - 哪些机制可以定义完整性约束条件? - 实体完整性的检查主要关注什么方面? - 参照完整性违约处理有哪几种方式? - 用户定义的完整性与实体完整性和参照完整性有何不同? ---- [ 6.1 数据库安全性](dbds-6-1.html#/overview) [| 练习 |](dbds-exec.html) [ 6.3 数据库恢复](dbds-6-3.html#/overview)

黑公网安备23010302001726号   黑ICP备2024033110号-1