《Oracle大型数据库基础开发教程》(微课视频版)课件 第5章 数据库完整性_第1页
《Oracle大型数据库基础开发教程》(微课视频版)课件 第5章 数据库完整性_第2页
《Oracle大型数据库基础开发教程》(微课视频版)课件 第5章 数据库完整性_第3页
《Oracle大型数据库基础开发教程》(微课视频版)课件 第5章 数据库完整性_第4页
《Oracle大型数据库基础开发教程》(微课视频版)课件 第5章 数据库完整性_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章数据库完整性5.1完整性概述一、实体完整性实体完整性指的是如果一个字段是主键字段,则此字段不能取空值(NULL)。例如:EMP表中雇员编号EMPNO为主键,则该字段在输入时不能取空(NULL),如表5-1所示。5.1完整性概述二、域完整性域完整性指的是数据类型、范围、长度等约束。例如:表5-1EMP表的定义如下所示:名称是否为空?类型-----------------------------------------------------------------EMPNONOTNULLNUMBER(4)ENAMEVARCHAR2(10JOBVARCHAR2(9)MGRNUMBER(4)HIREDATEDATESALNUMBER(7,2)COMMNUMBER(7,2)DEPTNONUMBER(2)5.1完整性概述三、参照完整性1.外键一个字段或一组字段不是表R的主键,但它和另外一个表S的主键相对应,则该字段或字段组合为R的外键。例如:表5-1EMP表中的DEPTNO不是EMP的主键但是它和另一表6-2DEPT表中的DEPTNO相对应(EMP表中的DEPTNO的值都取自DEPT表中的DEPNO字段)。DEPT表如表5-2所示:5.1完整性概述2.参照完整性若一个表的外键和另一个表的主键相对应,则该表在外键上的取值为:或者取空值(NULL)(外键的每个属性值均为空值)。或者等于另外一个表的某个元组的主键值。例:表6-1EMP表中的外键DEPTNO的取值,或者取NULL表示没有所属的部门,或者取自表6.2DEPT表中的DEPTNO中的某一个字段值(10,20,30)。四、用户定义的完整性用户定义的完整性指的是用户根据某一具体应用设置的约束条件。Oracle中必须提供这样的定义机制,来实现用户定义的约束条件。例:表6.1EMP表中如果定义COMM在0-5000的范围就属于用户定义的完整性约束。5.2约束类型Oracle数据完整性约束可以分为主键(PRIMARYKEY)、非空(NOTNULL)、唯一(UNIQUE)和检查(CHECK)约束和外键(FOREIGNKEY)约束五种类型。一、主键约束候选键是唯一标识表中每一条记录的字段或字段组合。若一个表有多个候选键,则选定其中一个为主键,定义主键的子句为PRIMARYKEY,指定了主键后,包含在主键里的字段为主键字段,主键字段不为空,主键值唯一。1.创建表时定义创建表时定义主键约束的语法格式如下:CREATETABLE[schema.]table_name(columndatatype[DEFAULTexpr][[CONSTRAINTconstraint_name]PRIMARYKEY],--列级约束

...[[CONSTRAINTconstraint_name]PRIMARYKEY(colum1,colum2,…)]);--表级约束5.2约束类型例:创建学生表student,包括学号(Sno)、姓名(Sname)、Sage(年龄)、性别(Ssex)、出生日期(Birthday)、系院(Sdept)等学生信息。其中学号(Sno)为主键。CREATETABLESTUDENT(Snochar(6)PRIMARYKEY,Snamevarchar2(8),Sagenumber(2,0),Ssexchar(2),Birthdaydate,Sdeptchar(20));5.2约束类型指定约束名CREATETABLESTUDENT(Snochar(6)CONSTRAINTPK_SnoPRIMARYKEY,Snamevarchar2(8),Sagenumber(2,0),Ssexchar(2),Birthdaydate,Sdeptchar(20));5.2约束类型表级约束例:创建一选课表SC,包括学号(Sno),课程号(Cno),成绩(Grade),主键为(Sno,Cno)。

CREATETABLESC(Snovarchar(12),Cnovarchar(3),Gradenumber(3,0),CONSTRAINTPK_SCPRIMARY(Sno,Cno));5.2约束类型2.使用ALTERTABLE创建表之后可以使用ALTERTABLE添加或删除主键约束,向已有表中添加主键约束时,表中的主键值不能有重复的值,表中的主键字段不能有NULL,删除约束时必须要指定要删除的约束名称,语法格式如下:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]PRIMARYKEY(colum1,colum2,…)[DROPCONSTRAINTconstraint_name]例:为SC表添加主键约束(Sno,Cno)。ALTERTABLESCADDPRIMARYKEY(Sno,Cno);5.2约束类型指定约束名称PK_SnoCno。ALTERTABLESCADDCONSTRAINTPK_SnoCnoPRIMARYKEY(Sno,Cno);例:删除SC表的主键约束PK_SnoCnoALTERTABLESCDROPCONSTRAINTPK_SnoCno;二、非空约束非空约束指定某字段不能取空值(NULL),它只能在列级定义。在默认情况下,Oracle允许字段的内容为空值,定义非空约束的子句为NOTNULL。1.创建表时定义创建表时定义非空约束的语法格式如下:CREATETABLE[schema.]table_name(columndatatype[DEFAULTexpr][[CONSTRAINTconstraint_name]NOTNULL],...);5.2约束类型例:创建课程表(course),包括课程号(Cno)、课程名(Cname)、学分(Ccredit),要求课程名不能为空。CREATETABLECOURSE(Cnochar(3)PRIMARYKEY,Cnamevarchar2(20)NOTNULL,Ccreditnumber(3));2.使用ALTERTABLE创建表之后可以使用ALTERTABLE添加或删除非空约束,向已有表中添加非空约束时,相应的字段不能有NULL。5.2约束类型语法格式如下:ALTERTABLEtable_nameMODIFYcloumn[CONSTRAINTconstraint_name]NOTNULL;[DROPCONSTRAINTconstraint_name]例:给STUDENT表的Sname字段添加非空约束,约束名为NOTNULL_SnameALTERTABLESTUDENTMODIFYSnameCONSTRAINTNOTNULL_SnameNOTNULL;例:删除STUDENT表Sname的非空约束。ALTERTABLESTUDENTDROPCONSTRAINTNOTNULL_Sname;5.2约束类型三、唯一约束惟一约束条件要求表的一个字段或多字段的组合内容必须是惟一的,即不能有重复的值。指定了UNIQUE的字段如果没有指定NOTNULL约束时允许输入NULL值,并且可多次输入NULL值,Oracle认为(NULL)不等于任何值。UNIQUE约束可以定义在列级,也可定义在表级。但如果惟一约束包含表的多个字段,则必须在表级定义。1.创建表时定义语法格式如下:CREATETABLE[schema.]table_name(columndatatype[DEFAULTexpr][[CONSTRAINTconstraint_name]UNIQUE],--列级约束

...[[CONSTRAINTconstraint_name]UNIQUE(column,…)]);--表级约束5.2约束类型例:创建课程表(course),包括课程号(Cno)、课程名(Cname)、学分(Ccredit),要求课程名取值唯一。CREATETABLECOURSE(Cnochar(3)PRIMARYKEY,Cnamevarchar2(20)UNIQUE,Ccreditnumber(3));2.使用ALTERTABLE创建表之后可以使用ALTERTABLE添加或删除唯一约束,向已有表中添加唯一约束时相应的字段不能有重复的值。5.2约束类型语法格式如下。ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]UNIQUE(column,…);[DROPCONSTRAINTconstraint_name]例:给STUDENT表的Sname字段添加唯一约束,约束名为UNIQUE_SnameALTERTABLESTUDENTADDCONSTRAINTUNIQUE_SnameUNIQUE(Sname);例:删除STUDENT表Sname的唯一约束。ALTERTABLESTUDENTDROPCONSTRAINTUNIQUE_Sname;5.2约束类型四、检查约束检查约束是用来定义表上的每一行必须满足约束条件,一个字段上的CHECK约束可以定义多个。CHECK约束不能定义在伪列上,可以调用SYSDATE、USER等系统函数。一个CHECK约束可以包含一个字段或多字段。CHECK约束可以定义在列级,也可以定义在表级,如果CHECK约束包含表的多个字段,则必须在表级定义。1.创建表时定义语法格式如下:CREATETABLE[schema.]table_name(columndatatype[DEFAULTexpr][[CONSTRAINTconstraint_name]CHECK(condition)],--列级约束

...[[CONSTRAINTconstraint_name]CHECK(condition)]);--表级约束5.2约束类型例:创建学生表student,包括学号(Sno)、姓名(Sname)、Sage(年龄)、性别(Ssex)、出生日期(Birthday)、系院(Sdept)等学生信息。其中学号(Sno)为主键,性别只能输入‘男’或‘女’。CREATETABLESTUDENT(Snochar(6)PRIMARYKEY,Snamevarchar2(8),Sagenumber(2,0),Ssexchar(2)CONSTRAINTCH_SsexCHECK(Ssex='男'orSsex='女'),Birthdaydate,Sdeptchar(20));5.2约束类型2.使用ALTERTABLE创建表之后可以使用ALTERTABLE添加或删除检查约束,向已有表中添加检查约束时现有表中的数据必须满足定义的条件,否则禁止添加,语法格式如下:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]CHECK(condition);[DROPCONSTRAINTconstraint_name]例:为SC表中的Grade添加一个检查约束CH_Grade,限制Grade的取值范围为0-100。ALTERTABLESCADDCONSTRAINTCH_GradeCHECK(GradeBETWEEN0AND100);例:删除SC表的检查约束CH_Grade。ALTERTABLESCDROPCONSTRAINTCH_Grade;5.2约束类型五、外键约束定义外键约束(FOREIGNKEY)必须用REFERENCES指定所参照的表及字段,REFERENCES所参照的表为父表或主表,外键所在的表为子表或从表。外键约束可以定义在列级,也可以定义在表级,定义外键约束的语法格式如下:语法格式如下:CREATETABLE[schema.]table_name(columndatatype[DEFAULTexpr][[CONSTRAINTconstraint_name]REFERENCEStable_name(column)[ONDELETECASCADE|ONDELETESETNULL]],--列级约束

...[[CONSTRAINTconstraint_name]FOREIGNKEY(column1,column2,…)REFERENCEStable_name(column1,column2,…)[ONDELETECASCADE|ONDELETESETNULL]]);--表级约束5.2约束类型ALTERTABLE的语法格式如下:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]FOREIGNKEY(column1,column2,…)REFERENCEStable_name(column1,column2,…)[ONDELETECASCADE|ONDELETESETNULL];[DROPCONSTRAINTconstraint_name]其中ONDELETECASCADE、ONDELETESETNULL为外键规则子句,可以缺省,缺省时,也就是Oracle的基本的参照规则:禁止改变从表中的外键值(此值在主表中主键中不存在);禁止修改在从表中有对应记录的主表记录的主键值;禁止删除在从表中有对应记录的主表记录。ONDELETECASCADE:如果字表中子记录存在,则删除主表中的主记录时,级联删除子记录。ONDELETESETNULL:如果字表中子记录存在,则删除主表中的主记录时,将子记录(外键值)置成空。5.2约束类型1.创建表时定义例:创建一选课表SC,包括学号(Sno),课程号(Cno),成绩(Grade),主键为(Sno,Cno),同时指定其外键为Sno,参照Student表中的Sno字段。

CREATETABLESC(Snovarchar(12)REFERENCESStudent(Sno),Cnovarchar(3),Gradenumber(3,0),CONSTRAINTPK_SCPRIMARY(Sno,Cno));5.2约束类型2.使用ALTERTABLE例:为EMP表中的EMPNO字段添加外键约束,参照DEPT表中的DEPTNO,约束名FK_DEP_DEPTNO。ALTERTABLEEMPADDCONSTRAINTFK_DEP_DEPTNOREFERENCESDEPT(DEPTNO);例:为EMP表中的EMPNO字段添加外键约束,参照DEPT表中的DEPTNO,约束名FK_DEP_DEPTNO_DELETE,参照规则为ONDELETECASCADE。ALTERTABLEEMPADDCONSTRAINTFK_DEP_DEPTNO_DELETEREFERENCESDEPT(DEPTNO)ONDELETECASCADE;5.2约束类型例:为EMP表中的EMPNO字段添加外键约束,参照DEPT表中的DEPTNO,约束名FK_DEP_DEPTNO_SET_NULL,参照规则为ONSETNULL。ALTERTABLEEMPADDCONSTRAINTFK_DEP_DEPTNO__SET_NULLREFERENCESDEPT(DEPTNO)ONSETNULL;例:删除EMP表的外键约束FK_DEP_DEPTNO。ALTERTABLEEMPDROPCONSTRAINTFK_DEP_DEPTNO;5.2约束类型六、查看约束1.查看某表的所有约束其语法格式如下:SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,STATUSFROMUSER_CONSTRAINTSWHERETABLE_NAME=‘用户表’;例:查看EMP表的所所有约束SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,STATUSFROMUSER_CONSTRAINTSWHERETABLE_NAME='EMP';注意此处的EMP一定要用打写字母。5.2约束类型2.查看某表的所有字段对应的约束其语法格式如下:SELECTCONSTRAINT_NAME,COLUMN_NAMEFROMUSER_CONS_COLUMNS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论