1、第7章 数据完整性,学习目标,学会使用PRIMARY KEY(主键)约束、UNIQUE(唯一)约束保证表完整性学会使用CHECK(检查)约束、DEFAULT(默认约束)、DEFAULT(默认值)、RULE(规则)保证列数据完整性学会使用PRIMARY KEY(主键)约束、FOREIGN KEY(外键)约束保证表与表之间的参照完整性,内容框架,7.1 约束,数据库的完整性表的完整性指表中必须只有一个主关键字,且主键值不能为空()列的完整性指表中任一列的数据类型必须符合用户的定义,或者说数据必须在规定的有效范围之内参照完整性引用完全性,保证在插入和删除操作时,通过公共关键字连接的两个表保证参照(相
2、互)完整性,7.1 约束,约束(constrain)定义数据有效性规则,防止数据库中出现不正确或不一致的数据表的完整性,保证表不会出现完全相同的两行定义主键约束(primary key )、唯一约束(unique key)或唯一标识参照完整性主键约束(primary key ) 、外键约束(foreign key)和触发器列完整性Check(检查)约束、Default(默认值)约束、Rule(规则)约束,约束的所有类型,主键约束(Primary key)外键约束(Foreign Key)唯一约束(Unique Key)检查约束(Check Key)默认约束(Default Key),约束应用-
3、主键约束,Primary 约束能确保主键的值是唯一的一个表只能有一个主键约束主键列值不允许为空如果主键约束定义在多列中,则一列中的值可以重复,例 7.1 用Management Studio 为Student 表创建Primary Key 约束选中表Student点击右键,在弹出菜单中选取“修改”在新打开的表结构中选中“StuNo”,点击右键,在弹出菜单中选取“设置主键” 最后选择保存,结束设置,使用Management Studio创建主键,例 7.2 用Management Studio 为StuCou表创建Primary Key 约束(StuNo+CouNo),使用Management
4、Studio创建主键,利用多列形成主键,选择StuNo+CouNo,可以作为主键约束选中表StuCou点击右键,在弹出菜单中选取“修改”在新打开的表结构中先选中“StuNo”,然后按住“Ctrl”或“Shift”键点击右键,在弹出菜单中选取“设置主键” 最后选择保存,结束设置,使用SQL语句,创建主键,增加约束Alter Table table_nameAlter Table table_nameAdd constraint Constraint_namePrimary Key Clustered( col_name ,)注: Clustered 表示表中数据的存放按照主键值的顺序存放,使访问
5、迅速删除约束Drop constraint Constraint_name,例 7.4 用Transact-SQL 为Department表创建基于DepartNo列的Primary Key 约束,用Transact-SQL创建主键,use xkgoalter table departmentadd constraint PK_Department primary key (departNo)Go注意:如果是多列形成主键,在primary key (列名1, 列名2),删除主键约束,use xkgoalter table departmentdrop constraint PK_Departm
6、ent go,实训及作业,实训练习在集成环境中主键的建立和删除,并能查看练习使用SQL语言中主键的建立和删除,并能查看作业P190 1.根据你的理解,简述Saless数据库需要设置哪些主键,写出SQL语句,Foreign Key 约束,外键可由一列或多列组合而成,用以实现表与表之间的数据联系必须先定义主表中的主键,再定义从表中的外键定义为外键的列必须为另外一个表中的已经定义的主键删除时,先删除从表中外键,再删除主表中主键建立了外键约束后,如果想删除主表中的行,必须先取消外键与主键间的约束关系,定义外键的SQL语句,Alter Table table1_nameAdd constraint co
7、nstraint_nameForeign Key(col1_name)References table 2_name(col2_name) 说明: References 参照 table 2_name 主键表(col2_name) 主键列名col1_name与col2_name 列名相同,例 7.6,将从表StuCou中列StuNo设置为外键,这个外键参照主表Student中StuNo列(已经设为Student表中主键),外键名为StuNo_FKuse xkgoalter table StuCouadd constraint StuNo_FK foreign key (StuNo)refere
8、nces Student(StuNo)go,必须先定义主表中的主键,再定义从表中的外键;即要在表Student中定义主键StuNo不然显示如下错误信息,建好的外键显示,删除外键,use xkgo alter table StuCoudrop constraint StuNo_FK go,建立具有级联删除功能的外键约束,级联删除当删除主表中(主键所在的表)的行时,在从表中(外键所在的表)那些相关联信息将被删除use xkgo alter table StuCouadd constraint StuNo_FK foreign key (StuNo) references Student(StuNo
9、) on delete cascadego 注:级联修改功能外键:on update cascade,实训及作业,实训练习Foreign Key 约束作业P190 7.7实训第3题根据你的理解,简述sale数据库需要设置哪些外键,写出SQL语句,例 7.9 使用Management Studio 在xk中为StuCou 表创建基于CouNo的约束,设置CouNo为Course表中主键,新建外键关系:修改表,选中选课表StuCou,点击键,右击,选中“新建关系”,添加,修改外键名,修改“标识”名,点击“表和列规范”,添加主键表和外键表及其所选的键名,最后点击确定后(注意如果有”无“,左侧选择空行
10、,在下一行进行选择),记住最后要保存到数据库,删除StuCou外键约束,点击修改表,删除关系(删除后保存),实训,练习使用Management Studio增加外键约束、删除外键约束,Unique 约束,确保表中每行数据的某列值不会出现重复值(primary key也可以实现)但Unique 约束允许为一个表建立多个这样的约束Unique 约束允许被约束值为空,但不允许空值多余一个(即不能出现重复值),语句实现,use xkalter table courseadd constraint UN_CouName unique(CouName)Go注意:显示在键栏目下=use xkalter ta
11、ble coursedrop constraint UN_CouName go,Check 约束,作用限制列数据的有效范围一个列上可以使用多个check约束示例use xkgoalter table Courseadd constraint CK_Course check(CouNo like 0-90-90-9 and CouNo000 )go,设定约束后,修改受限,Default 约束,Default 约束避免列值为空值Use xkGoAlter Table StuCouADD constraint DF_StuCou_State default (报名) for state,State为“”,显示红色,关闭,再打开,就自动填上“报名”了,本章小结,本章介绍了约束、默认值、规则应该掌握使用Management Studio和Transact-SQL语句来创建、删除这些数据库对象,作业与实训,P190思考题 1-4实训题 1-5,Sale数据库关系图(外键),