1/19主讲人:夏岩2/19数据完整性目标:1.理解数据完整性2.掌握数据库约束3/193数据完整性数据完整性指数据库中存储数据的一致性数据完整性类型:实体完整性域完整性引用完整性用户自定义DB4/19实体完整性主要实现方法:主键约束primarykeyIDENTITY属性和Unique约束3.1实体完整性学号姓名性别班级出生日期980010101张涛男310780-03-24980010102李明男310883-01-01实体完整性是将行定义为特定表的唯一实体。5/193.1.1主键•主键是表中一列或多列的组合,能够唯一确定表中一行记录。学号姓名980010101张涛980010102李明CreatetableStudent(StuNovarchar(9)primarykey,StuNamevarchar(10))6/193.1.2Unique约束•UNIQUE约束在列集内强制执行值的唯一性•Createtablestudent(StuNovarchar(9)primarykey,StuNamevarchar(10),StuCardIDvarchar(18)unique)7/193.1.3使用IDENTITY属性语法:IDENTITY[(seed,increment)]初值增量例如:CREATETABLEScore(fIDintIDENTITY(101,1),fcodevarchar(13)NOTNULL,fsubjectvarchar(20)NOTNULL,fscorefloatNOTNULL)8/193.2域完整性域完整性是指给定列的输入有效性。强制域有效性的方法有:限制类型(指定列的数据类型)格式控制(如Check约束控制输入格式)可能值范围(如Notnull约束,default定义,check约束)9/193.2.1Check约束的使用作用:控制用户输入数据的格式语法:CreateTABLEStudent(fCodevarchar(9)NOTNULL,fNamevarchar(10)NOTNULL,fSexchar(2)Check(fsexin(‘男’,‘女’)),fClassvarchar(4)NOTNULL,fBirthdaydatetime)10/19作用:提供给用户一个特定值CREATETABLEStudent(fCodevarchar(9)NOTNULL,fNamevarchar(10)NOTNULL,fSexchar(2)NOTNULL,fClassvarchar(4)NOTNULL,fBirthdaydatetimedefault‘1980-1-1’)3.2.2Default默认值定义11/193.3引用完整性引用完整性确保键值在所有表中一致Score表980010102103980010102102980010101101学号自动编号82英语72数学68英语成绩考试科目学号姓名性别班级出生日期980010101张涛男310780-03-24980010102李明男310883-01-01Student表外键12/193.3.1FOREIGNKEY(外键约束)FOREIGNKEY约束定义列值与另一个表的PRIMARYKEY相匹配的列REFERENCES子句与ALTERTABLE语句一起使用以创建FOREIGNKEY13/19--创建外键CREATETABLEscore(fIDintIDENTITY(101,1),fcodevarchar(9)NOTNULL,fsubjectvarchar(20)NOTNULL,fscorefloatNOTNULL,PRIMARYKEY(fID),FOREIGNKEY(fcode)REFERENCESStudent(fcode))14/19以修改表的方式添加约束--1、添加主键约束altertablestudentaddconstraintPK_fCodeprimarykey(fCode)--2、添加默认值定义altertablestudentaddconstraintDF_fNamedefault‘缺省’forfName15/193、添加检查约束altertablestudentaddconstraintCK_fSexcheck(fSexin('男','女'))约束名16/193.4删除约束•语法ALTERTABLEstudentDROPCONSTRAINTDF_birthday17/19数据完整性和约束实体完整性:PRIMARYKEY约束UNIQUE约束Identity属性域完整性:CHECK约束DEFAULT定义NOTNULL约束引用完整性:FOREIGNKEY约束本课总结18/19作业:1.按要求创建表Employee,Salary2.要求:Emp包括如下字段:eId(主键),eName(默认值:缺省),eSex(检查:男,女),eGrade(Check约束),eBirthday(Check约束:>1960.1.1)3.要求:Salary包括如下字段:sId(主键),eId(外键),sBaseSalary(Check约束:>0),sSalary(默认值:0)