数据库系统概论-005: 数据库完整性(正确性和相容性)
来源:互联网 发布:win764精简游戏优化版 编辑:程序博客网 时间:2024/04/30 10:56
一:数据完整性和数据安全性
1: 数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。
完整性检查和控制的防范对象时不合语义的,不正确的数据,防止它们进入数据库。
2: 数据的安全性是保护数据库防止恶意的破坏和非法的存取。
安全性控制防范的对象时非法用户和非法操作,防止它们对数据库数据库的非法存取。
3: 为维护数据库的完整性,DBMS能够
A: 提供定义完整性约束条件的机制
B: 提供完整性检查的方法
C: 违约处理
二:实体完整新
1: 实体完整性定义,即PRIMARY KEY
CREATE TABLE S(SNO VARCHAR(10) PRIMARY KEY,
SNAME VARCHAR(20) NOT NULL,
STATUS VARCHAR(20),
CITY VARCHAR(20) NOT NULL);
2: 实体完整性检查和违约处理
用PRIMARY KEY定义了关系的主码后,每当用户对基本表插入一条记录或者对主码进行列更新操作时。会自动进行检查:
A: 检查主码值是否唯一,如果不唯一则拒绝插入或修改。
B: 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
三:参照完整性
1: 参照完整性定义:FOREIGN KEY + REFERENCES
CREATE TABLE SPJ(SNO VARCHAR(10) FOREIGN KEY REFERENCES S(SNO),
PNO VARCHAR(10) FOREIGN KEY REFERENCES P(PNO),
JNO VARCHAR(10) FOREIGN KEY REFERENCES J(JNO),
QTY INT,
PRIMARY KEY(SNO, PNO, JNO));
2: 参照完整性的检查和违约处理:
一个参照完整性将两个表中的相应元组联系起来了,因此,对被参照表和参照表进行增删改操作时有可能破坏参照完整性。
A: 在SPJ表中增加一个元组,该元组的SNO属性的值在表S中找不到一个元组,其SNO属性值与之相等。
B: 修改SPJ表中的一个元组,修改后的元组属性SNO值在S中找不到一个元组,其SNO属性值与之相等。
C: 从S中删除一个元组,照成SPJ表中表中某些元组的SNO属性值在表S中找不到一个元组,其SNO属性值与之相等。
D: 修改S表中的一个元组,照成SPJ表中表中某些元组的SNO属性值在表S中找不到一个元组,其SNO属性值与之相等。
当上述不一致发生时,系统可以采用以下策略进行处理:
A: 拒绝执行:默认
B: 级联操作:当删除或修改照成表元组以参照表不一致时,则删除或修改参照表中照成不一致的元组。
C: 设置为空值:当删除或修改照成表元组以参照表不一致时,则将参照表中照成不一致的元组设置为空。
CREATE TABLE SPJ(SNO VARCHAR(10) FOREIGN KEY REFERENCES S(SNO)
ON DELETE CASCADE //当删除S表中元组时,级联删除SPJ中相应元组
ON UPDATE CASCADE,//当更新S表中元组时,级联更新SPJ中相应元组
PNO VARCHAR(10) FOREIGN KEY REFERENCES P(PNO)
ON DELETE NO ACTION //拒绝删除
ON UPDATE CASCADE,
JNO VARCHAR(10) FOREIGN KEY REFERENCES J(JNO),
QTY INT,
PRIMARY KEY(SNO, PNO, JNO));
四:用户定义的完整性
1: 属性上的约束条件的定义
在CREATE TABLE中定义属性的同时可以根据应用的要求,定义属性上的约束条件,即属性值限制。
A: 列值非空(NOT NULL)
B: 列值唯一(UNIQUE)
C: 检查列值是否满足一个布尔表达式(CHECK)
如性别:Ssex CHAR(2) CHECK(Ssex IN('男','女'));
如成绩:Grade SMALLINT CHECK(Grade>=0 AND Grade<=100);
2: 属性上的约束条件检查和违约处理:拒绝处理
五:完整性约束命名子句
1: 完整性约束命名子句
CONSTRAINT <完整性约束条件名> [PRIMARY KEY 短语|FOREIGN KEY 短语|CHECK短语]
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('男','女')),
CONSTRAINT StudentKey PRIMARY KEY(Sno));
2: 修改表中的完整性限制(ALTER)
ALTER TABLE Student DROP CONSTRAINT C4;
还可以通过删除原来的约束条件来增加新的约束条件。
ALTER TABLE Student DROP CONSTRAINT C1;
ALTER TABLE Student ADD CONSTRAINT C1 CHECK(Sno BETWEEN 900000 AND 999999);
六:触发器
触发器是用户定义在关系表上的一类时间驱动的特殊过程。
一旦定义,任何用户对表的增删改操作均由服务器自动激活相应的触发器。
1: 定义触发器
CREATE TRIGGER <触发器名> |BEFORE|AFTER <触发事件> ON <表名>
FOR EACH |ROW|STATEMENT| [WHEN <触发跳进>] <触发动作体>
A: 表的拥有者即创建者才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器。
B: 同一模式下,触发器名必须是唯一的。
C: 当表的数据发生变化时,将激活定义在该表上相应<触发事件>的触发器,因此,该表也称为触发器的目标表。
D: 触发事件可以是INSERT,DELETE或UPDATE,也可以是组合。
E: 触发器可分为行级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT).
F: 触发条件:
触发器被激活时,只有当触发条件为真时触发动作体才执行,否则触发动作体不执行。
如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行。
G: 触发动作体:触发动作体可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用。
H: 为教师表定义“教授工资不得低于4000,如果低于4000,自动改为4000”
CREATE TRIGGER Insert_Or_Update_Sal //在教师表上定义触发器
BEFORE INSERT OR UPDATE ON Teacher //触发事件是插入或更新操作
FOR EACH ROW //行级触发器
AS BEGIN //定义触发体,过程块
IF((new.pJob='教授') AND (new.Sal<4000))
THEN new.Sal:=4000; //由于是行级触发器,可在过程体中使用插入或更新操作后的新值
END IF;
END; //触发动作体结束
I: 当教师工资发生变化时,就自动在工资变化表中增加一条相应的记录。
CREATE TRIGGER Insert_Sal
AFTER INSERT ON Teacher //触发事件是INSERT
FOR EACH ROW
AS BEGIN
INSERT INTO Sal_log VALUES(new.Eno, new.Sal, CURRENT_USER, CURRENT_TIMESTAMP);
END;
CREATE TRIGGER Update_Sal
AFTER UPDATE ON Teacher //触发事件是UPDATE
FOR EACH ROW
AS BEGIN
IF(new.Sal<>old.Sal)
THEN INSERT INTO Sal_log VALUES(new.Eno, new.Sal, CURRENT_USER, CURRENT_TIMESTAMP);
END IF;
END;
2: 触发器激活:同一个表上多个触发器激活时遵循执行顺序如下:
A: 执行该表上的BEFORE触发器,多个BEFORE触发器时,谁先创建谁先执行。
B: 激活触发器的SQL语句
C: 执行该表上的AFTER触发器
3: 删除触发器
DROP TRIGGER <触发器名> ON <表名>
- 数据库系统概论-005: 数据库完整性(正确性和相容性)
- 【数据库系统概论】-数据库完整性
- 数据库概论(实验五)数据库完整性
- 数据库概论 --- 完整性约束
- 第5章 数据库完整性(数据库系统概论)
- 数据库系统概论学习笔记---关系的俩个完整性
- 数据库系统概论学习笔记(七):安全性,数据完整性(触发器)
- 数据库系统概论学习笔记----表级完整性约束与列级完整性约束
- 【数据库系统概论】绪论----数据库系统概论(一)
- 【数据库系统概论】绪论----数据库系统概论(二)
- 【数据库系统概论】绪论----数据库系统概论(三)
- 数据库系统概论(1)
- 数据库系统概论第五版学习笔记数据库完整性 第五章
- 【数据库系统概论】----关系数据库(一)
- 数据库系统概论
- 数据库系统概论 讲义
- 数据库系统概论
- 数据库系统概论
- 数据库系统概论-002:关系数据库
- 笔记(二)输入与输出
- 2010总结
- 数据库系统概论-003:关系数据库标准语言
- 数据库系统概论-004:数据库安全
- 数据库系统概论-005: 数据库完整性(正确性和相容性)
- 数据库系统概论-006: 关系数据理论
- 笔记(三)while语句
- 数据库系统概论-007: 数据库设计
- 开发环境搭建2:linux下oracle安装
- 数据库系统概论-008: 游标和存储过程
- [2010年终大礼]破壳而出的琉璃之鸟 汉化补丁 第二版(win8兼容版发布)
- 数据库系统概论-009: 关系查询处理和查询优化
- FireFox 中 回把nextSibling为/n 换行时解释为undefinded