数据库作业13:CHECK / CONSTRAINT / TRIGGER / PROCEDURE/ FUNCTION

本文详细介绍了数据库中的完整性约束,包括实体完整性、参照完整性和用户定义的完整性,以及如何定义和处理违约情况。此外,还探讨了触发器的概念,如何定义、激活和删除触发器,以及它们在确保数据完整性中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.1 实体完整性

5.1.1 定义实体完整性

关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。对多个属性构成的码只有一种说明方法,即定义为表级约束条件。

【例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 参照完整性

5.2.1 定义参照完整性

关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。
例如,关系SC中一个元组表示一个学生的选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码

【例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.2.2 参照完整性检查和违约处理

在这里插入图片描述

【例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短语)

(1)不允许取空值
【例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), /*在表级定义实体完整性,Sno、Cno都不为空值*/
  )

(2)列值唯一
【例5.6】建立部门表DEPT,要求部门名称Dname列值取值唯一,部门编号Deptno列为主码

CREATE TABLE DEPT
 (Deptno NUMERIC(2),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值