数据库学习12 - 第五章例题

本文详细介绍了数据库的完整性,包括实体完整性、参照完整性和用户定义的完整性。通过多个例题展示了如何定义和管理主键、外键、非空约束、唯一约束、检查约束以及完整性约束的命名子句。此外,还探讨了断言、触发器的概念及其在数据库管理中的应用,以及存储过程的创建、执行、修改和删除操作。
摘要由CSDN通过智能技术生成


数据库的完整性是指数据的正确性和相容性。 数据的正确性是指数据是否符合现实世界语义、反映当前实际状况;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑。

5.1 实体完整性

关系模型的实体完整性在CREATE TABLE中用 PRIMARY KEY定义,分为列级约束条件和表级约束条件。定义完成后,需要检查:
(1)主码值是否唯一,如果不唯一则拒绝插入或修改。
(2)主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。

例题5.1:将Student表中的Sno属性定义为码。

1)在列级定义码:
create table Student
(Sno char(9) primary key,
Sname char(20) not null,
Ssex char(2),
Sage smallint,
Sdept char(20));2)在表级定义码:
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),
			/*在表级定义实体完整性,Sno、Cno都不能取空值*/
	foreign key(Sno) references Student(Sno)
			/*在表级定义参照完整性*/
		on delete cascade	
			/*删除Student元组时,级联删除SC表中相应的元组*/
		on update cascade	
			/*Student表更新Sno时,级联更新SC表中相应的元组*/
	foreign key(Cno) references Course(Cno)
			/*在表级定义参照完整性*/
		on delete no action	
			/*当删除Course表中的元组导致与SC表不一致时拒绝删除*/
		on update cascade	
			/*当更新Course表中的Cno时级联更新SC表中相应的元组*/
);

5.3 用户定义的完整性

5.3.1 属性上的约束条件

在CREATE TABLE中定义属性的同时,根据应用要求定义属性上的约束条件,包括:

· 列值非空(not null)

· 列值唯一(unique)

· 检查列值是否满足一个条件表达式(check短语)

例5.5:在定义SC表时,说明Sno、Cno、Grade 属性不允许取空值。

create table SC
(Sno char(9) not null,      //Sno不能为空
 Cno char(4) not null,     //Cno不能为空
 Grade smallint not null, //Grade不能为空
 primary key (Sno,Cno),
  ……
);

例5.6:建立部门表DEPT,要求部门名称 Dname 列取值唯一,部门编号Deptno列为主码。

create table DEPT
(Deptno numeric(2),
 Dname char(9) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想秃头少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值