数据库作业13:【第五章】SQL练习8 - CHECK / CONSTRAINT / TRIGGER / PROCEDURE/ FUNCTION

本文介绍了数据库的完整性概念,包括实体完整性、参照完整性和用户定义的完整性,并通过实例详细解释了如何在SQL中定义和管理这些完整性约束。此外,还探讨了触发器和存储过程的使用,包括触发器的类型和定义,以及存储过程的创建和执行,以加深对数据库管理的理解。
摘要由CSDN通过智能技术生成

数据库的完整性包括数据的正确性和数据的相容性。正确性:数据符合现实世界语义,反映了当前实际状况。相容性:同一对象在不同关系表中的数据是符合逻辑的。
数据的完整性:防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。防范对象:不合语义的,不正确的数据。
数据的安全性:保护数据库,防止恶意的破坏和非法的存取。防范对象:非法用户和非法操作。

5.1 实体完整性

关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。
单属性构成的码:定义为列级约束条件或定义为表级约束条件。
多个属性构成的码:只能定义为表级约束条件。
实体完整性检查:
1.检查主码值是否唯一,如果不唯一就拒绝插入或修改。
2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
【例5.1】将Student表中的Sno属性定义为码。

CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,  /*在列级定义主码*/
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);

或者

CREATE TABLE Student
(Sno CHAR(9) ,  
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY(Sno)  	/*在表级定义主码*/
);

在这里插入图片描述
【例5.2】将SC表中的Sno、Cno属性组定义为码

CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno) 	/*只能在表级定义主码*/
);

在这里插入图片描述

5.2 参照完整性

关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。
可能破坏参照完整性的情况及违约处理↓
在这里插入图片描述
【例5.3】定义SC中的参照完整性

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)  /*在表级定义参照完整性*/
);

在这里插入图片描述
【例5.4】显示说明参照完整性的违约处理示例

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)
ON DELETE CASCADE /*级联删除SC表中对应的元组*/
ON UPDATE CASCADE, /*级联更新SC表中对应的元组*/
FOREIGN KEY(Cno) REFERENCES Course(Cno)  
ON DELETE NO ACTION /*当删除Course表中的元组造成了与SC表不一致时拒绝删除*/
ON UPDATE CASCADE /*当更新Course表中的Cno时,级联更新SC表中相应的元组*/
);

·执行语句前的SC表
在这里插入图片描述
在学生表删除学号为201215121的学生

DELETE 
FROM Student
WHERE Sno='201215121';

再查询SC表,发现也没有了
在这里插入图片描述
·在学生表把201215122学生的学号更新为201215129

UPDATE Student
SET Sno='201215129'
WHERE Sno='201215122';

查看SC表,发现已经更新了
在这里插入图片描述
··删除课程表中课程号为2的课程

DELETE 
FROM Course
WHERE Cno='2';

发现拒绝删除,因为SC表有课程号为2的学生的选课记录。
在这里插入图片描述
·把课程表课程号是2的课程改成课程号为10

UPDATE Course
SET Cno='10'
WHERE Cno='2';

再看SC表,发现课程号也更新了
在这里插入图片描述

5.3 用户定义的完整性

针对某一具体应用的数据必须满足的语义要求。
5.3.1 属性上的约束条件
CREATE TABLE时定义属性上的约束条件
包括:
1.列值非空(NOT NULL)
2.列值唯一(UNIQUE)
3.检查列值是否满足一个条件表达式(CHECK短语)
(1)不允许取空值
属性上约束条件的检查和违约处理
插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足,如果不满足就拒绝执行。
【例5.5】在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。

CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT NOT NULL,
PRIMARY KEY(Sno,Cno), 
FOREIGN KEY(Sno) REFERENCES Student(Sno)
ON DELETE CASCADE /*级联删除SC表中对应的元组*/
ON UPDATE CASCADE, /*级联更新SC表中对应的元组*/
FOREIGN KEY(Cno) REFERENCES Course(Cno)  
ON DELETE NO ACTION /*当删除Course表中的元组造成了与SC表不一致时拒绝删除*/
ON UPDATE CASCADE /*当更新Course表中的Cno时,级联更新SC表中相应的元组*/
)
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值