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