Loading... ## 5.1 什么是数据库完整性 数据库的完整性是指数据的**正确性**和**相容性** ## 5.2 数据库完整性概念与数据库的安全性概念有什么区别和联系 是两个不同的概念但有一定的联系 **数据库完整性**为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出 **数据库安全性**保护数据库防止恶意破坏和非法存取 **安全性**的防范对象是**非法用户和非法操作**;**完整性**措施防范对象是**不合语义的数据** ## 5.3 什么是数据库的完整性约束条件 指数据库中的数据应该满足的语义约束条件 ## 5.4 DBMS的完整性控制机制有哪三个方面功能 1. 定义功能 2. 检查功能 3. 违约处理功能 ## 5.5 RDMBS实现参照完整性是需要考虑哪些方面 RDBMS在实现参照完整性时需要考虑可能破坏参照完整性的各种情况,以及用户违约后的处理策略 ## 5.6 完整性约束命名子句 ### 完整性约束命名子句 一般格式为 ```sql CONSTRAINT <完整性约束条件名> <完整性约束条件名1> ``` ```sql CREATE TABLE Student( Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK(Sage<30), Ssex CHAR(2) CONSTRAINT C4 CHECK(Ssex IN ('m','f')), CONSTRAINT StudentKey PRIMARY KEY(Sno) ); ``` ### 修改完整性限制 1. 删除 ```sql DROP CONSTRAINT C4; ``` 2. 修改 1. 删除 2. 添加 ```sql DROP CONSTRAINT C1; ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999); ``` ## 5.7 断言 1. 创建断言的语句 ```sql CREATE ASSERTION <断言名> <CHECK 子句> ``` ```sql CREATE ASSERTION ASSE_SC_DB_NUM CHECK ( 60 >= ( SELECT COUNT(*) FROM Course,SC WHERE SC.Cno=Course.Cno AND Course.Cname='DATABASE' ) ); ``` 2. 删除 ```sql DROP ASSERTION ASSE_SC_DB_NUM ``` ## 5.8 触发器 一般格式 ```sql CREATE TRIGGER <触发器名字> {BEFORE|AFTER} <出发时间> ON <表名> REFERENCING NEW|OLD ROW AS <变量> FOR EACH {ROW|STATEMENT} [WHEN <触发条件>] <触发动作体> ``` 例:当对SC的Grade属性进行修改时,若分数增加了10%,则将此次操作记录到另一个表SC_U(Sno,Cno,Oldgrade,Newgrade)中 ```sql CREATE TRIGGER SC_T AFTER UPDATE OF Grade ON SC REFERENCING OLDROW AS OldTuple NEWROW AS NewTuple FOR EACH ROW WHEN (NewTuple.Grade >= 1.1*OldTuple.Grade) INSERT INTO SC_U(Sno,Cno,Oldgrade,Newgrade) VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade); ``` ## 5.9 在关系系统中,操作实体违反实体完整性、参照完整性和用户完整性约束条件时,如何处理 违反**实体完整性**和**用户完整性**,一般采用***拒绝执行***的方式 违反参照完整性,并不简单的**拒绝执行**,有时**根据语义进行一系列的附加操作** 最后修改:2020 年 11 月 01 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏