数据库技术项目式教程(MySQL)课件 任务3.3设置约束_第1页
数据库技术项目式教程(MySQL)课件 任务3.3设置约束_第2页
数据库技术项目式教程(MySQL)课件 任务3.3设置约束_第3页
数据库技术项目式教程(MySQL)课件 任务3.3设置约束_第4页
数据库技术项目式教程(MySQL)课件 任务3.3设置约束_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

设置约束任务提出数据库中的数据是从外界输入的,由于种种原因,会发生输入无效或错误数据。数据完整性正是为了防止数据库中存在不符合语义规定的数据和防止因错误信息的输入或输出造成无效操作或错误信息而提出的。任务分析数据完整性是指数据的精确性和可靠性。数据完整性分为3类:实体完整性、参照完整性、用户自定义的完整性。其中,实体完整性和参照完整性是任何关系表必须满足的完整性约束条件。通过为表的字段设置约束来保证表中数据完整性。MySQL包括四大约束,分别是:主键约束(PRIMARYKEY)、唯一约束(UNIQUE)、外键约束(FOREIGNKEY)、检查约束(CHECK)。1.主键和实体完整性(1)主键主键:唯一标识表中每一行的属性或最小属性组,主键中的各个属性称为主属性,不包含在主键中的属性称为非主属性。主键可以是单个属性,也可以是属性组。例:学生(学号,姓名,性别,出生年月,班级编号),成绩(学号,课程编号,平时成绩,期末成绩)。(2)实体完整性实体完整性规则:若属性A是关系R的主属性,则属性A不能取空值。实体完整性用于保证关系数据库表中的每条记录都是唯一的,建立主键的目的就是为了实现实体完整性。相关知识与技能2.设置主键约束(PRIMARYKEY)(1)在CREATETABLE语句创建表同时设置主键若主键由一个字段组成:可以在定义列的同时设置主键,语法规则如下:字段名数据类型PRIMARYKEY。也可以在定义完所有列之后设置主键:[CONSTRAINT约束名]PRIMARYKEY(字段名)。主键约束名的取名规则推荐采用:PK_表名。其中Constraint

约束名可以省略,如果省略,约束名采用系统默认生成的。相关知识与技能任务实施【例1】设置表Class中的ClassNo字段为主键。#在定义列的同时设置主键USESchool;CREATETABLEClass(ClassNo varchar(10)NOTNULLPRIMARYKEY,ClassName varchar(30)NOTNULL,College varchar(30)NOTNULL,Specialty varchar(30)NOTNULL, EnterYear int);任务实施【例1】设置表Class中的ClassNo字段为主键。#在定义完所有列之后设置主键CREATETABLEClass(ClassNo varchar(10)NOTNULL,ClassNamevarchar(30)NOTNULL,College varchar(30)NOTNULL,Specialty varchar(30)NOTNULL, EnterYear int,PRIMARYKEY(ClassNo));任务实施若主键由多个字段联合组成,只能在定义完所有列之后设置主键。[CONSTRAINT约束名]PRIMARYKEY(字段名)。多个字段名之间使用逗号分隔。【例2】设置表Score中的Sno、Cno字段为主键。CREATETABLEScore(Snovarchar(15)NOTNULL,Cnovarchar(10)NOTNULL,Uscore decimal(4,1),EndScoredecimal(4,1),PRIMARYKEY(Sno,Cno));(2)使用ALTERTABLE语句修改表添加主键约束ALTERTABLE表名ADD[CONSTRAINT约束名]PRIMARYKEY(字段名);【例3】设置表Student中的Sno字段为主键。ALTERTABLEStudentADDPRIMARYKEY(Sno);3.设置表的属性自动增加在数据库应用中,通过为某字段添加AUTO_INCREMENT关键字,实现每次插入新记录时,系统自动生成该字段的值。一个表只能有一个字段设置为AUTO_INCREMENT,并且该字段必须为主键的一部分。设置为AUTO_INCREMENT字段的数据类型必须为整数类型。相关知识与技能任务实施【例4】创建数据表Teacher,字段包括ID、TeacherName、College,指定ID字段的值自动递增。USESchool;CREATETABLETeacher(IDintAUTO_INCREMENT

PRIMARYKEY,TeacherNamevarchar(50),Collegevarchar(50));4.唯一约束UNIQUE约束应用于表中的非主键列,用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。UNIQUE约束与PRIMARYKEY约束:一张表可以设置多个UNIQUE约束,而PRIMARYKEY约束在一个表中只能有一个;设置了UNIQUE约束的列值必须唯一,如果字段允许为空,可以有空值。而设置了PRIMARYKEY约束的列值必须唯一,而且不允许为空。相关知识与技能任务实施【例5】设置表Class中的ClassName字段值为唯一。#在定义列的同时设置唯一约束USESchool;CREATETABLEClass(ClassNovarchar(10)NOTNULLPRIMARYKEY,ClassNamevarchar(30)NOTNULLUNIQUE,College varchar(30)NOTNULL,Specialtyvarchar(30)NOTNULL, EnterYearint);任务实施【例5】设置表Class中的ClassName字段值为唯一。#在定义完所有列之后设置唯一约束CREATETABLEClass(ClassNo varchar(10)NOTNULLPRIMARYKEY,ClassNamevarchar(30)NOTNULL,College varchar(30)NOTNULL,Specialty varchar(30)NOTNULL, EnterYearint,UNIQUE(ClassName));若唯一约束由多个字段联合组成,只能在定义完所有列之后设置唯一约束:[CONSTRAINT约束名]UNIQUE(字段名)。多个字段名之间使用逗号分隔。(2)使用ALTERTABLE语句修改表添加唯一约束ALTERTABLE表名ADD[CONSTRAINT约束名]UNIQUE(字段名);【例6】设置表Course中的Cname字段值为唯一。ALTERTABLECourseADDUNIQUE(Cname);5.检查约束检查约束也称为CHECK约束,该约束通过条件表达式去判断输入值是否满足条件。作用是限制表中一列或多列的输入值,保证数据库中数据的用户自定义完整性。例如,限制成绩字段只能输入0~100之间的数据、性别字段的值只能为男或女。MySQL从8.0.16版本开始,添加了针对所有存储引擎的CHECK约束的核心特性,可以在CREATETABLE语句创建表同时设置CHECK约束,也可以使用ALTERTABLE语句修改表添加CHECK约束。相关知识与技能(1)在CREATETABLE语句创建表同时设置CHECK约束若CHECK约束只涉及一个字段,可以在定义列的同时设置CHECK,语法如下:字段名数据类型CHECK(条件表达式)也可以在定义完所有列之后设置CHECK,语法如下:[CONSTRAINT约束名]CHECK(条件表达式)其中,CHECK约束名的取名规则推荐采用:CK_字段名。“CONSTRAINT约束名]”可以省略,如果省略,约束名采用系统默认生成的。相关知识与技能任务实施【例7】给Student表中的Sex字段设置检查约束,在输入值时只允许输入“男”或“女”。#方法1:定义列的同时设置CHECK约束USESchool;CREATETABLEIFNOTEXISTSStudent(SnoVARCHAR(50)NOTNULLPRIMARYKEY,SnameVARCHAR(50)NOTNULL,SexVARCHAR(10)NOTNULLCHECK(Sex='男'ORSex='女'),BirthDATE,ClassNoVARCHAR(50)NOTNULL);#方法2:在定义完所有列之后设置CHECK约束CREATETABLEIFNOTEXISTSStudent(SnoVARCHAR(50)NOTNULLPRIMARYKEY,SnameVARCHAR(50)NOTNULL,SexVARCHAR(10)NOTNULL,BirthDATE,ClassNoVARCHAR(50)NOTNULL,CHECK(Sex='男'ORSex='女'));任务实施【注意】若CHECK约束涉及表的多个字段,只能在定义完所有列之后设置CHECK约束。【例8】在School数据库中设置入住表Live的字段OutDate的值必须晚于字段InDate的值。CREATETABLEIFNOTEXISTSLive(SnoVARCHAR(50)NOTNULL,DormNoVARCHAR(50)NOTNULL,BedNoVARCHAR(10)NOTNULL,InDateDATENOTNULL,OutDateDATE,PRIMARYKEY(Sno,InDate),CHECK(InDate<OutDate));(2)使用ALTERTABLE语句修改表添加CHECK约束ALTERTABLE表名ADD[CONSTRAINT约束名]CHECK(条件表达式);【例9】设置约束使得Score表中Uscore字段、Endscore字段的值在0~100之间。ALTERTABLEScoreADDCONSTRAINTCK_UscoreCHECK(Uscore>=0ANDUscore<=100);ALTERTABLEScoreADDCONSTRAINTCK_EndScoreCHECK(EndScore>=0ANDEndScore<=100);6.外键和参照完整性(1)外键A表中有列X,该列不是所在表A的主键,但可以是主属性,它参照了另一张表B的主键字段或者具有唯一约束的字段Y,称列X为所在表A的外键(外码)。被参照的那个表B称为主表,而表A称为从表。列X称为参照列,列Y称为被参照列。(2)参照完整性参照完整性规则:如果表中存在外键,则外键的值必须与主表中的某条记录的被参照列的值相同,如果外键列允许为空则或者外键的值为空。参照完整性用于确保相关联表间的数据保持一致。相关知识与技能7.设置外键约束(FOREIGNKEY)(1)在CREATETABLE语句创建表同时设置外键在定义完所有列之后设置外键:[CONSTRAINT约束名]FOREIGNKEY(外键字段名)REFERENCES主表名(被参照字段名)。外键约束名的取名规则推荐采用FK_从表名_主表名。相关知识与技能任务实施【例10】给Student表的ClassNo字段设置外键约束,使该字段的值参照Class表的主键字段ClassNo。CREATETABLEifnotexistsStudent(Sno varchar(15)NOTNULLPRIMARYKEY,Sname varchar(10)NOTNULL,Sex char(4)NOTNULL,Birth date,ClassNo varchar(10)NOTNULL,FOREIGNKEY(ClassNo)REFERENCESClass(ClassNo));(2)使用ALTERTABLE语句修改表添加外键约束ALTERTABLE表名

温馨提示

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

评论

0/150

提交评论