Oracle数据库教程(第3版 微课视频版) 课件 第7章 数据完整性_第1页
Oracle数据库教程(第3版 微课视频版) 课件 第7章 数据完整性_第2页
Oracle数据库教程(第3版 微课视频版) 课件 第7章 数据完整性_第3页
Oracle数据库教程(第3版 微课视频版) 课件 第7章 数据完整性_第4页
Oracle数据库教程(第3版 微课视频版) 课件 第7章 数据完整性_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1第7章数据完整性7.1数据完整性概述7.2实体完整性7.3参照完整性7.4域完整性Oracle数据库教程(第3版•微课视频版)27.1数据完整性概述数据完整性规则通过约束来实现,约束是在表上强制执行的一些数据校验规则,在插入、修改或者删除数据时必须符合在相关字段上设置的这些规则,否则报错。1.实体完整性实体完整性要求表中有一个主键,其值不能为空且能唯一地标识对应的记录,又称为行完整性,通过PRIMARYKEY约束、UNIQUE约束等实现数据的实体完整性。2.参照完整性参照完整性保证主表中的数据与从表中数据的一致性,又称为引用完整性,参照完整性确保键值在所有表中一致,通过定义主键(PRIMARYKEY)与外键(FOREIGNKEY)之间的对应关系实现参照完整性。3.域完整性域完整性指列数据输入的有效性,又称列完整性,通过CHECK约束、NOTNULL约束、DEFALUT约束等实现域完整性。

Oracle数据库教程(第3版•微课视频版)37.1数据完整性概述总括起来,Oracle数据库中的数据完整性包括实体完整性、参照完整性、域完整性,以及实现上述完整性的约束。

PRIMARYKEY约束,主键约束,用于实现实体完整性。

UNIQUEKEY约束,唯一性约束,用于实现实体完整性。

FOREIGNKEY约束,外键约束,用于实现参照完整性。

CHECK约束,检查约束,用于实现域完整性。

NOTNULL约束,非空约束,用于实现域完整性。

Oracle数据库教程(第3版•微课视频版)47.2实体完整性7.2.1PRIMARYKEY约束1.在创建表时创建PRIMARYKEY约束(1)定义列级主键约束语法格式:

[CONSTRAINTconstraint_name]PRIMARYKEY(2)定义表级主键约束语法格式:

[CONSTRAINTconstraint_name]PRIMARYKEY{(column_name[,…n])}说明:

PRIMARYKEY:定义主键约束的关键字。

constraint_name:指定约束的名称。如果不指定,系统会自动生成约束的名称。

Oracle数据库教程(第3版•微课视频版)57.2实体完整性【例7.1】创建student1表,以列级完整性约束方式定义主键。CREATETABLEstudent1(sidchar(6)NOTNULLPRIMARYKEY,/*在列级定义主键约束,未指定约束名称*/snamechar(12)NOTNULL,ssexchar(3)NOTNULL,sbirthdaydateNOTNULL,specialitychar(12)NULL,tcnumberNULL);在sid列定义的后面加上关键字PRIMARYKEY,列级定义主键约束,未指定约束名称,系统自动创建约束名称。

Oracle数据库教程(第3版•微课视频版)67.2实体完整性【例7.2】创建student2表,以表级完整性约束方式定义主键。CREATETABLEstudent2(sidchar(6)NOTNULL,snamechar(12)NOTNULL,ssexchar(3)NOTNULL,sbirthdaydateNOTNULL,specialitychar(12)NULL,tcnumberNULL,PRIMARYKEY(sid)/*在表级定义主键约束,未指定约束名称*/);在表中所有列定义的后面加上一条PRIMARYKEY(sid)子句,表级定义主键约束,未指定约束名字,系统自动创建约束名字。如果主键由表中一列构成,主键约束采用列级定义或表级定义均可。如果主键由表中多列构成,主键约束必须用表级定义。

Oracle数据库教程(第3版•微课视频版)77.2实体完整性【例7.3】创建student3表,以表级完整性约束方式定义主键,并指定主键约束名称。CREATETABLEstudent3(sidchar(6)NOTNULL,snamechar(12)NOTNULL,ssexchar(3)NOTNULL,sbirthdaydateNOTNULL,specialitychar(12)NULL,tcnumberNULL,CONSTRAINTPK_student3PRIMARYKEY(sid,sname)/*在表级定义主键约束,指定约束名称为PK_student3*/);在表级定义主键约束,指定约束名字为PK_student3。指定约束名字,在需要对完整性约束进行修改或删除时,引用更为方便。本例主键由2列构成,必须用表级定义。

Oracle数据库教程(第3版•微课视频版)87.2实体完整性2.删除PRIMARYKEY约束语法格式:ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name[,…n]【例7.4】删除例7.3创建的在student3表上的主键约束。ALTERTABLEstudent3DROPCONSTRAINTPK_student3;

Oracle数据库教程(第3版•微课视频版)97.2实体完整性3.在修改表时创建PRIMARYKEY约束语法格式:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]PRIMARYKEY(column[,...n])【例7.5】重新在student3表上定义主键约束。ALTERTABLEstudent3ADDCONSTRAINTPK_student3PRIMARYKEY(sid,sname);

Oracle数据库教程(第3版•微课视频版)107.2实体完整性7.2.2UNIQUE约束1.在创建表时创建UNIQUE约束(1)定义列级唯一性约束。语法格式:[CONSTRAINTconstraint_name]UNIQUE(2)定义表级唯一性约束。语法格式:[CONSTRAINTconstraint_name]UNIQUE(column_name[,…n])说明:

UNIQUE:定义唯一键约束的关键字。

constraint_name:指定约束的名称。如果不指定,系统会自动生成约束的名称。

Oracle数据库教程(第3版•微课视频版)117.2实体完整性【例7.6】创建student4表,以列级完整性约束方式定义唯一性约束。CREATETABLEstudent4(sidchar(6)NOTNULLPRIMARYKEY,snamechar(12)NOTNULLUNIQUE,ssexchar(3)NOTNULL,sbirthdaydateNOTNULL,specialitychar(12)NULL,tcnumberNULL);在sname列定义的后面加上关键字UNIQUE,列级定义唯一性约束,未指定约束名字,系统自动创建约束名字。

Oracle数据库教程(第3版•微课视频版)127.2实体完整性【例7.7】创建student5表,以表级完整性约束方式定义唯一性约束。CREATETABLEstudent5(sidchar(6)NOTNULLPRIMARYKEY,snamechar(12)NOTNULL,ssexchar(3)NOTNULL,sbirthdaydateNOTNULL,specialitychar(12)NULL,tcnumberNULL,CONSTRAINTUN_student5UNIQUE(sname));在表中所有列定义的后面加上一条CONSTRAINT子句,表级定义主键约束,指定约束名字为UN_student5。

Oracle数据库教程(第3版•微课视频版)137.2实体完整性2.删除UNIQUE约束语法格式:ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name[,…n]【例7.8】删除例7.7在student5表创建的唯一性约束。ALTERTABLEstudent5DROPCONSTRAINTUN_student5;

Oracle数据库教程(第3版•微课视频版)147.2实体完整性3.在修改表时创建UNIQUE约束语法格式:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]UNIQUE(column[,...n])【例7.9】重新在student5表上定义唯一性约束。ALTERTABLEstudent5ADDCONSTRAINTUN_student5UNIQUE(sname);

Oracle数据库教程(第3版•微课视频版)157.3参照完整性7.3.1定义参照完整性的步骤定义表间参照关系的步骤如下:(1)首先定义主键表的主键(或唯一键)。(2)再定义外键表的外键。使用PRIMARYKEY约束或UNIQUE约束来定义主表主键或唯一键,FOREIGNKEY约束来定义从表外键,可实现主表与从表之间的参照完整性。例如,student表和score表是两个具有关联关系的表,将student表作为被参照表,表中的sid列作为主键,score表作为参照表,表中的sid列作为外键,从而建立被参照表与参照表之间的联系实现参照完整性,如图7.1所示。

Oracle数据库教程(第3版•微课视频版)167.3参照完整性

Oracle数据库教程(第3版•微课视频版)177.3参照完整性7.3.2FOREIGNKEY约束1.在创建表时创建FOREIGNKEY约束(1)定义列级外键约束。语法格式:

[CONSTRAINTconstraint_name][FOREIGNKEY]REFERENCESref_table(2)定义表级外键约束。语法格式:

[CONSTRAINTconstraint_name]FOREIGNKEY(column_name[,…n])REFERENCESref_table[(ref_column[,…n])][ONDELETE{CASCADE|SETNULL}]

Oracle数据库教程(第3版•微课视频版)187.3参照完整性说明:●

FOREIGNKEY:定义外键约束的关键字。●

constraint_name:指定约束的名称。如果不指定,系统会自动生成约束的名称。●

ONDELETE{CASCADE|SETNULL}:指定参照动作采用DELETE语句进行删除操作,删除动作如下。◆

CASCADE:定义级联删除,从主表删除数据时自动删除从表中匹配的行。◆

SETNULL:从主表删除数据时设置从表中对应外键键列为NULL。如果未指定动作,当删除主表数据时,如果违反外键约束,操作会被禁止。

Oracle数据库教程(第3版•微课视频版)197.3参照完整性【例7.10】创建score1表,在sid列以列级完整性约束方式定义外键。CREATETABLEscore1(sidchar(6)NOTNULLREFERENCESstudent1(sid),cidchar(4)NOTNULL,gradenumberNULL,PRIMARYKEY(sid,cid));由于已在student1表的sid列定义主键,故可在score1表的sid列定义外键,其值参照被参照表student1的sid列。列级定义外键约束,未指定约束名字,系统自动创建约束名字。

Oracle数据库教程(第3版•微课视频版)207.3参照完整性【例7.11】创建score2表,在sid列以表级完整性约束方式定义外键,并定义相应的参照动作。CREATETABLEscore2(sidchar(6)NOTNULL,cidchar(4)NOTNULL,gradenumberNULL,PRIMARYKEY(sid,cid),CONSTRAINTFK_score2FOREIGNKEY(sid)REFERENCESstudent2(sid)ONDELETECASCADE);在表级定义外键约束,指定约束名字为FK_score2。这里定义了1个参照动作,ONDELETECASCADE表示当删除学生表中某个学号的记录时,如果成绩表中有该学号的成绩记录,则级联删除该成绩记录。

Oracle数据库教程(第3版•微课视频版)217.3参照完整性2.删除FOREIGNKEY约束语法格式:ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name[,…n]【例7.12】删除例7.11在score2表上定义的外键约束。ALTERTABLEscore2DROPCONSTRAINTFK_score2;

Oracle数据库教程(第3版•微课视频版)227.3参照完整性3.在修改表时创建FOREIGNKEY约束语法格式:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]FOREIGNKEY(column[,...n])【例7.13】重新在score2表上定义外键约束。ALTERTABLEscore2ADDCONSTRAINTFK_score2FOREIGNKEY(sid)REFERENCESstudent2(sid);

Oracle数据库教程(第3版•微课视频版)237.4域完整性7.4.1CHECK约束1.在创建表时创建CHECK约束语法格式:

[CONSTRAINTconstraint_name]CHECK(logical_expression)说明:(1)CONSTRAINTconstraint_name:指定约束名。(2)logical_expression:指定检查约束的逻辑表达式。

Oracle数据库教程(第3版•微课视频版)247.4域完整性【例7.14】创建表score3,在grade列以列级完整性约束方式定义检查约束。CREATETABLEscore3(sidchar(6)NOTNULL,cidchar(4)NOTNULL,gradenumberNULLCHECK(grade>=0ANDgrade<=100),PRIMARYKEY(sid,cid));在grade列定义的后面加上关键字CHECK,约束表达式为grade>=0ANDgrade<=100,列级定义唯一性约束,未指定约束名字,系统自动创建约束名字。

Oracle数据库教程(第3版•微课视频版)257.4域完整性【例7.15】创建表score4,在grade列以表级完整性约束方式定义检查约束。CREATETABLEscore4(sidchar(6)NOTNULL,cidchar(4)NOTNULL,gradenumberNULL,PRIMARYKEY(sid,cid),CONSTRAINTCK_score4CHECK(grade>=0ANDgrade<=100));在表中所有列定义的后面加上一条CONSTRAINT子句,表级定义检查约束,指定约束名字为CK_score5。

Oracle数据库教程(第3版•微课视频版)267.4域完整性2.删除CHECK约束语法格式:ALTERTABLEtable_nameDROPCONSTRAINTcheck_name【例7.16】删除例7.15在score4表上定义的检查约束。ALTERTABLEscore4DROPCONSTRAINTCK_score4;

Oracle数据库教程(第3版•微课视频版)277.4域完整性3.在修改表时创建CHECK约束语法格式:ALTERTABLEtable_nameADD[<column_definition>][CONSTRAINTconstraint_name]CHECK(logical_expression)【例7.17】重新在score4表上定义检查约束。ALTERTABLEscore4ADDCONSTRAINTCK_score4CHECK(grade>=0ANDgrade<=100);

Oracle数据库教程(第3版•微课视频版)287.4域完整性7.4.2NOTNULL约束1.在创建表时创建NOTNULL约束语法格式:CREATETABLEtable_name(COLUMN_NAME1DATATYPENOTNULL,COLUMN_NAME2DATATYPENOTNULL,COLUMN_NAME3DATATYPE……);2.在修改表时创建NOTNULL约束语法格式:ALTERTABLEtable_nameMODIFYcol_nameNOTNULL;

Oracle数据库教程(第3版•微课视频版)297.4域完整性说明:(1)table_name:表名。(2)col_name:列名,要为其添加非空约束的列名。(3)NOTNULL:非空约束的关键字3.删除NOTNULL约束语法格式:ALTERTABLEtable_nameMODIFYcol_nameNULL;

Oracle数据库教程(第3版•微课视频版)307.4域完整性【例7.18】重新在score4表grade列定义NOTNULL约束,然后删除NOTNULL约束。在score4表grade列定义NOTNULL约束。ALTERTABLEscore4MODIFYgradeNOTNULL;在score4表grade列删除NOTNULL约束。ALTERTABLEscore4MODIFYgradeNULL;

Oracle数据库教程(第3版•微课视频版)317.4域完整性7.4.3DEFALUT约束语法格式:CREATETABLEtable_name(COLUMN_NAME1DATATYPEDEFAULTconstant_expression,COLUMN_NAME2DATATYPE,COLUMN_NAME3DATATYPE……);说明:(1)DEFAULT:默认值约束的关键字,通常放在列的数据类型的后面。(2)constant_expression:常量表达式,可以是一个具体的值,也可以是通过表达式得到一个值,这个值必须与该列的数据类型相匹配。

Oracle数据库教程(第3版•微课视频版)327.4域完整性【例7.19】创建student6

温馨提示

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

评论

0/150

提交评论