数据完整性和一致性控制约束规则触发器事务锁.ppt
《数据完整性和一致性控制约束规则触发器事务锁.ppt》由会员分享,可在线阅读,更多相关《数据完整性和一致性控制约束规则触发器事务锁.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库应用教程数据库应用教程n数据库的完整性控制数据库的完整性控制 n数据库的安全性管理数据库的安全性管理 n数据库备份与还原数据库备份与还原 第第8章章SQLServer2005数据库控制与维护数据库控制与维护 n8.1.1数据完整性概述数据完整性概述 n8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制n8.1.3使用规则实施数据完整性控制使用规则实施数据完整性控制 8.1数据库的完整性控制数据库的完整性控制n8.1.4使用默认值实施数据完整性控制使用默认值实施数据完整性控制 n8.1.5使用触发器实施数据完整性控制使用触发器实施数据完整性控制 8.1.1数据完整性概述数据完整
2、性概述1完整性的概念完整性的概念数据完整性是指数据的数据完整性是指数据的正确性、有效性、一致性和相容性正确性、有效性、一致性和相容性。由于数据。由于数据库是一个动态的集合,数据不断地被插入和被修改,因此由于主观或库是一个动态的集合,数据不断地被插入和被修改,因此由于主观或客观的原因,可能破坏数据库的数据完整性客观的原因,可能破坏数据库的数据完整性。2破坏数据库的数据完整性的情况破坏数据库的数据完整性的情况(1)无效的数据被添加到数据库中。如:某在教师管理系统中,输)无效的数据被添加到数据库中。如:某在教师管理系统中,输入的教师号不存在入的教师号不存在。(2)对数据库的修改不一致。如:在两个不同
3、的表中,同一教师的)对数据库的修改不一致。如:在两个不同的表中,同一教师的系号不同。系号不同。(3)将存在的数据修改为无效的数据。如:将某教师所在的系号修)将存在的数据修改为无效的数据。如:将某教师所在的系号修改为并不存在的系改为并不存在的系。8.1.1数据完整性概述数据完整性概述3完整性机制完整性机制为了保证存放数据的完整性,为了保证存放数据的完整性,DBMS应能对数据库进行数据完整性控应能对数据库进行数据完整性控制。在制。在SQLServer2000中,提供了中,提供了约束、默认值、规则、触发器约束、默认值、规则、触发器等等维护机制对数据完整性进行控制。维护机制对数据完整性进行控制。4完整
4、性分类完整性分类 在在SQLServer中,数据完整性分成四类:中,数据完整性分成四类:实体完整性实体完整性、域完整性域完整性、参照完整性参照完整性和和用户自定义完整性用户自定义完整性。8.1.1数据完整性概述数据完整性概述域完整性域完整性:也可称为列完整性。:也可称为列完整性。域完整性要求:域完整性要求:向表中指定列输入的数据必须具有正确的数据类向表中指定列输入的数据必须具有正确的数据类型、格式以及有效的数据范围。例如,在型、格式以及有效的数据范围。例如,在CollegeMIS数据库的数据库的SelectCourse表中,向表中,向Score(成绩)列输入数据时,不能出现(成绩)列输入数据时
5、,不能出现字符,也不能输入小于字符,也不能输入小于0或大于或大于100的数值。的数值。域完整性的控制方法域完整性的控制方法:主要有:主要有CHECK约束、外键约束、默认约约束、外键约束、默认约束、默认值、非空定义、规则以及在创建表时设置的数据类型束、默认值、非空定义、规则以及在创建表时设置的数据类型。实体完整性的控制方法实体完整性的控制方法:主要有主键约束、惟一索引、惟一约束和指:主要有主键约束、惟一索引、惟一约束和指定定IDENTITY属性。属性。5完整性控制方法完整性控制方法 参照完整性的控制方法参照完整性的控制方法:主要有外键约束,有时利用触发器也可实现:主要有外键约束,有时利用触发器也
6、可实现参照完整性控制。参照完整性控制。8.1.2使用使用约束约束实施数据完整性控制实施数据完整性控制在在SQLServer中,可通过约束来实施数据库的数据完整性控制,常用的约中,可通过约束来实施数据库的数据完整性控制,常用的约束有束有NOTNULL(非空非空)约束、约束、CHECK(检查检查)约束、约束、UNIQUE(惟一惟一)约束、约束、PRIMARYKEY(主键主键)约束、约束、FOREIGNKEY(外键外键)约束和约束和DEFAULT(默认默认)约束约束。1约束的建立约束的建立【格式格式】ALTERTABLEtable_nameADDCONSTRAINTconstraint_namePR
7、IMARYKEYCLUSTERED|NONCLUSTERED(column,.n)(1)主键约束的创建)主键约束的创建 【功能功能】为为table_name作为表名指定的表增加一个由作为表名指定的表增加一个由constraint_name指定指定名称的主键约束。名称的主键约束。【例例8-1】把把CollegeMIS数据库中数据库中SelectCourse表中的主键表中的主键pk_xuanke删除,然后重建。删除,然后重建。USECollegeMISGOALTERTABLESelectCourseDROPCONSTRAINTpk_xuankeGOALTERTABLESelectCourseADD
8、CONSTRAINTpk_xuankePRIMARYKEY(StuNo,TeaNo,CourseNo)GO8.1.2使用使用约束约束实施数据完整性控制实施数据完整性控制1约束的建立约束的建立【例例8-2】为为CollegeMIS数据库中的数据库中的Department表表的的DepartName字段创建字段创建一个惟一约束,约束名为一个惟一约束,约束名为IX_DepartName。(2)惟一约束惟一约束的创建的创建使用企业管理器创建惟一约束使用企业管理器创建惟一约束在一张数据表中,有时除主键需要具有唯一性外,还有其他列也需要具有在一张数据表中,有时除主键需要具有唯一性外,还有其他列也需要具有唯
9、一性。例如,在唯一性。例如,在“系部系部”表中,主键为表中,主键为“系部代码系部代码”,但是另外一个字,但是另外一个字段段“系部名称系部名称”虽不是主键,也需保证它的唯一性,这时就需要创建表中虽不是主键,也需保证它的唯一性,这时就需要创建表中的唯一约束。的唯一约束。使用对象资源管理器创建唯一约束使用对象资源管理器创建唯一约束下面以下面以“系部系部”表为例,为表为例,为“系部名称系部名称”字段创建唯一约束。字段创建唯一约束。操作步骤如下:操作步骤如下:(1 1)在)在“对象资源管理器对象资源管理器”窗格中,右击需要设置唯一约束的表(本例窗格中,右击需要设置唯一约束的表(本例为为“系部系部”表),
10、在弹出的快捷菜单中选择表),在弹出的快捷菜单中选择“修改修改”命令,打开命令,打开“表设计表设计器器”窗口。窗口。(2)在)在“表设计器表设计器”窗口中,右击需要设置为唯一约束的字段(本例为窗口中,右击需要设置为唯一约束的字段(本例为“系部名称系部名称”字段),在弹出的快捷菜单中选择字段),在弹出的快捷菜单中选择“索引索引/键键”命令,如图命令,如图6-7所所示,也可以直接单击工具栏中的示,也可以直接单击工具栏中的“管理索引和键管理索引和键”按钮,打开按钮,打开“索引索引/键键”对话框,如图对话框,如图6-8所示。所示。图6-7 选择“索引/键”命令图6-8 “索引/键”对话框(3)在打开的)
11、在打开的“索引索引/键键”对话框中,单击对话框中,单击“添加添加”按钮,结果如图按钮,结果如图6-9所所示。示。图6-9 单击“添加”按钮创建唯一约束(4)设置好相关选项后,单击)设置好相关选项后,单击“关闭关闭”按钮,完成唯一约束的创建。按钮,完成唯一约束的创建。这时,不只是该表的主键必须为唯一,并且被设置为唯一约束的字段同这时,不只是该表的主键必须为唯一,并且被设置为唯一约束的字段同样也必须为唯一。样也必须为唯一。8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制1约束的建立约束的建立【格式】【格式】ALTERTABLEtable_nameADDCONSTRAINTconstr
12、aint_nameUNIQUECLUSTERED|NONCLUSTERED(column,.n)(2)惟一约束的创建)惟一约束的创建使用使用Transact-SQL语句语句【功能功能】为为table_name作为表名指定的表增加一个由作为表名指定的表增加一个由constraint_name指定名称的惟一约束。指定名称的惟一约束。说明:说明:惟一约束默认的索引类型为惟一约束默认的索引类型为NONCLUSTERED。8.1.2使用使用约束约束实施数据完整性控制实施数据完整性控制1约束的建立约束的建立【例例8-3】通过通过Transact-SQL语句为语句为CollegeMIS数据库中的数据库中的D
13、epartment表的表的Telephone字段创建一个惟一约束,约束名为字段创建一个惟一约束,约束名为IX_Telephone。(2)惟一约束的创建)惟一约束的创建使用使用Transact-SQL语句语句USECollegeMISGOALTERTABLEDepartmentADDCONSTRAINTIX_TelphoneUNIQUE(Telephone)GO8.1.2使用使用约束约束实施数据完整性控制实施数据完整性控制1约束的建立约束的建立【例例8-4】为为CollegeMIS数据库中的数据库中的“课程课程表表”的的“学分学分”字段创建一个检字段创建一个检查约束,约束名为查约束,约束名为CK
14、_Grade。检查条件只允许为。检查条件只允许为17分,不允许小于分,不允许小于1分的分的学分和大于学分和大于7分的学分出现。分的学分出现。(3)检查约束的创建)检查约束的创建使用对象资源管理器使用对象资源管理器检查约束对输入的数据的值做检查,可以限定数据输入,从而维护数据的检查约束对输入的数据的值做检查,可以限定数据输入,从而维护数据的域完整性。域完整性。操作步骤如下:操作步骤如下:(1)在)在“对象资源管理器对象资源管理器”窗格中,右击需要设置唯一约束的表(本例为窗格中,右击需要设置唯一约束的表(本例为“课课程表程表”),在弹出的快捷菜单中选择),在弹出的快捷菜单中选择“修改修改”命令,打
15、开命令,打开“表设计器表设计器”窗口。窗口。(2)在)在“表设计器表设计器”窗口中右击需要创建检查约束的字段(本例为窗口中右击需要创建检查约束的字段(本例为“学分学分”字字段),在弹出的快捷菜单中选择段),在弹出的快捷菜单中选择“CHECK约束约束”命令,如图命令,如图6-11所示,打开所示,打开“CHECK约束约束”对话框。对话框。图6-11 选择“CHECK约束”命令(3)在)在“CHECK约束约束”对话框中,单击对话框中,单击“添加添加”按钮,然后在按钮,然后在“(名称名称)”文文本框中输入检查约束名称,在约束本框中输入检查约束名称,在约束“表达式表达式”文本框中输入约束条件,这文本框中
16、输入约束条件,这里输入里输入“(学分学分=1AND学分学分=7)”,如图,如图6-12所示。所示。图6-12 设置“CHECK约束”条件(4)单击)单击“关闭关闭”按钮关闭对话框,完成检查约束的创建。按钮关闭对话框,完成检查约束的创建。注意:注意:如果表中原来就有数据,并且数据类型或范围与所创建的约束相冲如果表中原来就有数据,并且数据类型或范围与所创建的约束相冲突,那么约束将不能成功创建。突,那么约束将不能成功创建。8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制1约束的建立约束的建立【格式】【格式】ALTERTABLEtable_nameADDCONSTRAINTconstra
17、int_nameCHECK(logical_expression)(3)检查约束的创建)检查约束的创建使用使用Transact-SQL语句语句【功能功能】为为table_name作为表名指定的表增加一个由作为表名指定的表增加一个由constraint_name指定名称的检查约束。指定名称的检查约束。说明:说明:“logical_expression”是检查约束的检查条件,通常是一个关是检查约束的检查条件,通常是一个关系表达式或逻辑表达式。系表达式或逻辑表达式。8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制1约束的建立约束的建立【例例8-5】使用使用Transact-SQL语句,
18、为语句,为CollegeMIS数据库中的数据库中的Student表的表的Birthday字段创建一个检查约束,约束名为字段创建一个检查约束,约束名为CK_Birthday。检查条件为。检查条件为Birthday字段的值必须小于当前日期。字段的值必须小于当前日期。(3)检查约束的创建)检查约束的创建使用使用Transact-SQL语句语句USECollegeMISGOALTERTABLEStudentADDCONSTRAINTCK_BirthdayCHECK(Birthday=GetDate()GO8.1.2使用使用约束约束实施数据完整性控制实施数据完整性控制1约束的建立约束的建立【例例8-6】
19、为为CollegeMIS数据库中的数据库中的Student表的表的Sex字段创建一个默认约束,字段创建一个默认约束,默认值为默认值为“男男”。(4)默认约束默认约束的创建的创建使用对象资源管理器使用对象资源管理器操作步骤如下:操作步骤如下:(1)在)在“对象资源管理器对象资源管理器”窗格中,右击需要创建默认约束的表(这里为窗格中,右击需要创建默认约束的表(这里为“学学生生”表),在弹出的快捷菜单中选择表),在弹出的快捷菜单中选择“修改修改”命令,打开命令,打开“表设计器表设计器”窗口。窗口。(2)选择需要创建默认约束的字段(这里为)选择需要创建默认约束的字段(这里为“性别性别”字段),然后在下
20、方的字段),然后在下方的“列属性列属性”选项卡中的选项卡中的“默认值或绑定默认值或绑定”文本框中输入默认值,本例为选择文本框中输入默认值,本例为选择“性别性别”字段,在默认值中输入字段,在默认值中输入“男男”,如图,如图6-13所示。所示。在用户输入某些数据时,希望一些数据在没有特例的情况下被自动输入,在用户输入某些数据时,希望一些数据在没有特例的情况下被自动输入,例如,学生的注册日期应该是数据录入的当天日期;学生的修学年限是固定的例如,学生的注册日期应该是数据录入的当天日期;学生的修学年限是固定的值;学生性别默认是值;学生性别默认是“男男”等情况,这个时候需要对数据表创建默认约束。等情况,这
21、个时候需要对数据表创建默认约束。下面分别用例子说明如何在对象资源管理器中和利用下面分别用例子说明如何在对象资源管理器中和利用SQL语句创建默认约束语句创建默认约束图6|13 输入默默认认值注意注意:单引号不需要输入,在表保存后,在单引号外还会自动生成一对小括号。(3)关闭“表设计器”窗口。8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制1约束的建立约束的建立【格式】【格式】ALTERTABLEtable_nameADDCONSTRAINTconstraint_nameDEFAULTconstant_expressionFORcolumn_name(4)默认约束的创建)默认约束的创
22、建使用使用Transact-SQL语句语句【功能功能】为为table_name作为表名指定的表增加一个由作为表名指定的表增加一个由constraint_name指定指定名称的默认约束。名称的默认约束。说明:说明:“column_name”是要设置默认约束的列名,是要设置默认约束的列名,“constant_expression”是设置的默认值。是设置的默认值。8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制1约束的建立约束的建立【例例8-7】为为CollegeMIS数据库中的数据库中的Student表的表的Grade字段创建一个默认约字段创建一个默认约束,约束名为束,约束名为DF_
23、Grade,默认值为,默认值为1。(4)默认约束的创建)默认约束的创建使用使用Transact-SQL语句语句USECollegeMISGOALTERTABLEStudentADDCONSTRAINTDF_GradeDEFAULT1FORGradeGO8.1.2使用约束实施数据完整性控制使用约束实施数据完整性控制1约束的建立约束的建立【例例8-8】为为CollegeMIS数据库中的数据库中的“教师教师”表表的创建一个外键约束,约束名的创建一个外键约束,约束名为为FK_Teacher_Department。约束对应的主键表为。约束对应的主键表为Department(引用的(引用的主键字段为主键字
24、段为系部代码系部代码),本表(),本表(“教师教师”表)的外键字段为表)的外键字段为系部代码系部代码。(5)外键约束的创建)外键约束的创建 使用对象资源管理器使用对象资源管理器操作步骤如下:操作步骤如下:(1)在)在“对象资源管理器对象资源管理器”窗格中,右击需要创建外键约束的表(这里为窗格中,右击需要创建外键约束的表(这里为“教师教师”表),在弹出的快捷菜单中选择表),在弹出的快捷菜单中选择“修改修改”命令,打开命令,打开“表设计器表设计器”窗口。窗口。(2)选择需要创建外键约束的字段(这里为)选择需要创建外键约束的字段(这里为“系部代码系部代码”字段),单击工具字段),单击工具栏中的栏中的
25、“关系关系”按钮,或右击该字段,在弹出的快捷菜单中选择按钮,或右击该字段,在弹出的快捷菜单中选择“关系关系”命令,命令,打开打开“外键关系外键关系”对话框,如图对话框,如图6-14所示。所示。外键是用来维护表与表之间对应唯一关系的一种方法。可以利用对象外键是用来维护表与表之间对应唯一关系的一种方法。可以利用对象资源管理器或资源管理器或SQL语句来创建外键约束。语句来创建外键约束。图6-14 “外键关系”对话框(3)在)在“外键关系外键关系”对话框中,单击对话框中,单击“添加添加”按钮,然后单击按钮,然后单击“表和列表和列规范规范”的按钮,打开的按钮,打开“表和列表和列”对话框。在对话框。在“主
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 完整性 一致性 控制 约束 规则 触发器 事务
限制150内