数据完整性和一致性控制约束规则触发器事务锁.ppt
《数据完整性和一致性控制约束规则触发器事务锁.ppt》由会员分享,可在线阅读,更多相关《数据完整性和一致性控制约束规则触发器事务锁.ppt(65页珍藏版)》请在三一办公上搜索。
1、第8章,第8章 SQL Server 2005数据库控制与维护,数据库应用教程,数据库的完整性控制,数据库的安全性管理,数据库备份与还原,第8章 SQL Server 2005数据库控制与维护,8.1.1 数据完整性概述,8.1.2 使用约束实施数据完整性控制,8.1.3 使用规则实施数据完整性控制,8.1 数据库的完整性控制,8.1.4 使用默认值实施数据完整性控制,8.1.5 使用触发器实施数据完整性控制,8.1.1 数据完整性概述,1完整性的概念,数据完整性是指数据的正确性、有效性、一致性和相容性。由于数据库是一个动态的集合,数据不断地被插入和被修改,因此由于主观或客观的原因,可能破坏数
2、据库的数据完整性。,2破坏数据库的数据完整性的情况,(1)无效的数据被添加到数据库中。如:某在教师管理系统中,输入的教师号不存在。,(2)对数据库的修改不一致。如:在两个不同的表中,同一教师的系号不同。,(3)将存在的数据修改为无效的数据。如:将某教师所在的系号修改为并不存在的系。,8.1.1 数据完整性概述,3完整性机制,为了保证存放数据的完整性,DBMS应能对数据库进行数据完整性控制。在SQL Server2000中,提供了约束、默认值、规则、触发器等维护机制对数据完整性进行控制。,4完整性分类,在SQL Server中,数据完整性分成四类:实体完整性、域完整性、参照完整性和用户自定义完整
3、性。,8.1.1 数据完整性概述,域完整性:也可称为列完整性。域完整性要求:向表中指定列输入的数据必须具有正确的数据类型、格式以及有效的数据范围。例如,在CollegeMIS数据库的SelectCourse表中,向Score(成绩)列输入数据时,不能出现字符,也不能输入小于0或大于100的数值。域完整性的控制方法:主要有CHECK约束、外键约束、默认约束、默认值、非空定义、规则以及在创建表时设置的数据类型。,实体完整性的控制方法:主要有主键约束、惟一索引、惟一约束和指定IDENTITY属性。,5完整性控制方法,参照完整性的控制方法:主要有外键约束,有时利用触发器也可实现参照完整性控制。,8.1
4、.2 使用约束实施数据完整性控制,在SQL Server中,可通过约束来实施数据库的数据完整性控制,常用的约束有NOT NULL(非空)约束、CHECK(检查)约束、UNIQUE(惟一)约束、PRIMARY KEY(主键)约束、FOREIGN KEY(外键)约束和DEFAULT(默认)约束。,1约束的建立,【格式】ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED(column,.n),(1)主键约束的创建,【功能】为table_name作为表名指定的表增加一个由con
5、straint_name指定名称的主键约束。,【例8-1】把CollegeMIS数据库中SelectCourse表中的主键pk_xuanke删除,然后重建。,USE CollegeMISGOALTER TABLE SelectCourse DROP CONSTRAINT pk_xuankeGOALTER TABLE SelectCourse ADD CONSTRAINT pk_xuanke PRIMARY KEY(StuNo,TeaNo,CourseNo)GO,8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-2】为CollegeMIS数据库中的Department表的Depart
6、Name字段创建一个惟一约束,约束名为IX_DepartName。,(2)惟一约束的创建使用企业管理器创建惟一约束,在一张数据表中,有时除主键需要具有唯一性外,还有其他列也需要具有唯一性。例如,在“系部”表中,主键为“系部代码”,但是另外一个字段“系部名称”虽不是主键,也需保证它的唯一性,这时就需要创建表中的唯一约束。,使用对象资源管理器创建唯一约束下面以“系部”表为例,为“系部名称”字段创建唯一约束。操作步骤如下:(1)在“对象资源管理器”窗格中,右击需要设置唯一约束的表(本例为“系部”表),在弹出的快捷菜单中选择“修改”命令,打开“表设计器”窗口。,(2)在“表设计器”窗口中,右击需要设置
7、为唯一约束的字段(本例为“系部名称”字段),在弹出的快捷菜单中选择“索引/键”命令,如图6-7所示,也可以直接单击工具栏中的“管理索引和键”按钮,打开“索引/键”对话框,如图6-8所示。,图6-7 选择“索引/键”命令,图6-8“索引/键”对话框,(3)在打开的“索引/键”对话框中,单击“添加”按钮,结果如图6-9所示。,图6-9 单击“添加”按钮创建唯一约束,(4)设置好相关选项后,单击“关闭”按钮,完成唯一约束的创建。这时,不只是该表的主键必须为唯一,并且被设置为唯一约束的字段同样也必须为唯一。,8.1.2 使用约束实施数据完整性控制,1约束的建立,【格式】ALTER TABLE tabl
8、e_name ADD CONSTRAINT constraint_name UNIQUE CLUSTERED|NONCLUSTERED(column,.n),(2)惟一约束的创建使用Transact-SQL语句,【功能】为table_name作为表名指定的表增加一个由constraint_name指定名称的惟一约束。说明:惟一约束默认的索引类型为NONCLUSTERED。,8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-3】通过Transact-SQL语句为CollegeMIS数据库中的Department表的Telephone字段创建一个惟一约束,约束名为IX_Telephon
9、e。,(2)惟一约束的创建使用Transact-SQL语句,USE CollegeMISGOALTER TABLE DepartmentADD CONSTRAINT IX_Telphone UNIQUE(Telephone)GO,8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-4】为CollegeMIS数据库中的“课程表”的“学分”字段创建一个检查约束,约束名为CK_Grade。检查条件只允许为17分,不允许小于1分的学分和大于7分的学分出现。,(3)检查约束的创建使用对象资源管理器,检查约束对输入的数据的值做检查,可以限定数据输入,从而维护数据的域完整性。,操作步骤如下:(1)
10、在“对象资源管理器”窗格中,右击需要设置唯一约束的表(本例为“课程表”),在弹出的快捷菜单中选择“修改”命令,打开“表设计器”窗口。(2)在“表设计器”窗口中右击需要创建检查约束的字段(本例为“学分”字段),在弹出的快捷菜单中选择“CHECK约束”命令,如图6-11所示,打开“CHECK约束”对话框。,图6-11 选择“CHECK约束”命令,(3)在“CHECK约束”对话框中,单击“添加”按钮,然后在“(名称)”文本框中输入检查约束名称,在约束“表达式”文本框中输入约束条件,这里输入“(学分=1 AND 学分=7)”,如图6-12所示。,图6-12 设置“CHECK约束”条件,(4)单击“关闭
11、”按钮关闭对话框,完成检查约束的创建。注意:如果表中原来就有数据,并且数据类型或范围与所创建的约束相冲突,那么约束将不能成功创建。,8.1.2 使用约束实施数据完整性控制,1约束的建立,【格式】ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(logical_expression),(3)检查约束的创建使用Transact-SQL语句,【功能】为table_name作为表名指定的表增加一个由constraint_name指定名称的检查约束。说明:“logical_expression”是检查约束的检查条件,通常是一个关系表达
12、式或逻辑表达式。,8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-5】使用Transact-SQL语句,为CollegeMIS数据库中的Student表的Birthday字段创建一个检查约束,约束名为CK_Birthday。检查条件为Birthday字段的值必须小于当前日期。,(3)检查约束的创建使用Transact-SQL语句,USE CollegeMISGOALTER TABLE StudentADD CONSTRAINT CK_Birthday CHECK(Birthday=GetDate()GO,8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-6】为Coll
13、egeMIS数据库中的Student表的Sex字段创建一个默认约束,默认值为“男”。,(4)默认约束的创建 使用对象资源管理器,操作步骤如下:(1)在“对象资源管理器”窗格中,右击需要创建默认约束的表(这里为“学生”表),在弹出的快捷菜单中选择“修改”命令,打开“表设计器”窗口。(2)选择需要创建默认约束的字段(这里为“性别”字段),然后在下方的“列属性”选项卡中的“默认值或绑定”文本框中输入默认值,本例为选择“性别”字段,在默认值中输入“男”,如图6-13所示。,在用户输入某些数据时,希望一些数据在没有特例的情况下被自动输入,例如,学生的注册日期应该是数据录入的当天日期;学生的修学年限是固定
14、的值;学生性别默认是“男”等情况,这个时候需要对数据表创建默认约束。下面分别用例子说明如何在对象资源管理器中和利用SQL语句创建默认约束,图6|13 输入默认值,注意:单引号不需要输入,在表保存后,在单引号外还会自动生成一对小括号。(3)关闭“表设计器”窗口。,8.1.2 使用约束实施数据完整性控制,1约束的建立,【格式】ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name,(4)默认约束的创建 使用Transact-SQL语句,【功能】为table_n
15、ame作为表名指定的表增加一个由constraint_name指定名称的默认约束。说明:“column_name”是要设置默认约束的列名,“constant_expression”是设置的默认值。,8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-7】为CollegeMIS数据库中的Student表的Grade字段创建一个默认约束,约束名为DF_Grade,默认值为1。,(4)默认约束的创建使用Transact-SQL语句,USE CollegeMISGOALTER TABLE StudentADD CONSTRAINT DF_GradeDEFAULT 1 FOR GradeGO,
16、8.1.2 使用约束实施数据完整性控制,1约束的建立,【例8-8】为CollegeMIS数据库中的“教师”表的创建一个外键约束,约束名为FK_ Teacher _Department。约束对应的主键表为Department(引用的主键字段为系部代码),本表(“教师”表)的外键字段为系部代码。,(5)外键约束的创建 使用对象资源管理器,操作步骤如下:(1)在“对象资源管理器”窗格中,右击需要创建外键约束的表(这里为“教师”表),在弹出的快捷菜单中选择“修改”命令,打开“表设计器”窗口。(2)选择需要创建外键约束的字段(这里为“系部代码”字段),单击工具栏中的“关系”按钮,或右击该字段,在弹出的快
17、捷菜单中选择“关系”命令,打开“外键关系”对话框,如图6-14所示。,外键是用来维护表与表之间对应唯一关系的一种方法。可以利用对象资源管理器或SQL语句来创建外键约束。,图6-14“外键关系”对话框,(3)在“外键关系”对话框中,单击“添加”按钮,然后单击“表和列规范”的按钮,打开“表和列”对话框。在“主键表”下拉列表中选择“系部”表,在“外键表”的下拉列表框中选择“教师”表,分别在“主键表”和“外键表”的下面选择“系部代码”字段,如图6-15所示。,图6-15“表和列”对话框,(4)单击“确定”按钮,然后在“外键关系”对话框中进行相关设置后单击“关闭”按钮即可。,8.1.2 使用约束实施数据
18、完整性控制,1约束的建立,【格式】ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY(column_name,.n)REFERENCES rel_table(ref_column,.n)ON DELETE CASCADE|NO ACTION ON UPDATE CASCADE|NO ACTION NOT FOR REPLICATION,(5)外键约束的创建使用Transact-SQL语句,【功能】为由table_name作为表名指定的表创建一个由constraint_name作为约束名的外键约束。,8.1.2 使用
19、约束实施数据完整性控制,1约束的建立,【例8-9】为CollegeMIS数据库中的SelectCourse表的创建一个外键约束,约束名为FK_SelectCourse_Student。约束对应的主键表为Student(引用的主键字段为StuNo),本表(SelectCourse表)的外键字段为StuNo。并设置级联删除和级联更新。,(6)默认约束的创建使用Transact-SQL语句,USE CollegeMISGOALTER TABLE SelectCourse ADD CONSTRAINT FK_SelectCourse_Student FOREIGN KEY(StuNo)REFERENC
20、ES Student(StuNo)ON DELETE CASCADE ON UPDATE CASCADEGO,8.1.2 使用约束实施数据完整性控制,2约束定义的查看,对于创建好的约束,根据实际需要可以查看其定义信息。SQL Server 2005提供了多种查看约束信息的方法,经常使用的有利用对象资源管理器和系统存储过程。(1)利用对象资源管理器查看约束信息 使用对象资源管理器查看约束信息的操作步骤如下:(1)在“对象资源管理器”窗格中,右击要查看约束的表,在弹出的快捷菜单中选择“修改”命令,打开“表设计器”窗口。(2)右击该表,在弹出的快捷菜单中分别选择“关系”、“索引/键”、“CHECK约
21、束”等命令查看约束信息,如图6-16所示。,图6-16 查看约束信息菜单,(2)利用系统存储过程查看约束的定义,存储过程sp_helptext是用来查看约束的一个系统提供的存储过程,可以通过查询分析器来查看约束的名称、创建者、类型和创建时间。其语法格式为:EXEC sp_help 约束名称 如果该约束有具体的定义和文本,那么可以用sp_helptext来查看。其语法格式为:EXEC sp_helptext 约束名称【例6.9】使用系统存储过程查看student数据库中定义的入学时间(名称为ck_rxsj)的约束信息和文本信息。代码如下,结果如图6-17所示。,USE studentGOEXEC
22、 sp_help ck_rxsjGOUSE studentGOEXEC sp_helptext ck_rxsjGO,8.1.2 使用约束实施数据完整性控制,3删除约束,使用对象资源管理器删除约束非常方便,正如在建立约束时一样,只需要在“表设计器”窗口中,将如图6-2所示的“设置主键”前的复选框取消即可删除主键约束,或删除默认值以删除默认约束;如图6-8所示,单击“删除”按钮删除唯一约束;如图6-12所示,单击“删除”按钮删除检查约束;如图6-14所示,单击“删除”按钮删除外键约束。,(1)使用对象资源管理器来删除表约束,(2)使用Transact-SQL语句删除约束,【格式】ALTER TAB
23、LE table_name DROP CONSTRAINT constraint_name,n,【功能】删除由“table_name”作为表名指定的表中由“constraint_name”作为约束名的约束。可以同时删除多个约束,约束名之间用“,”隔开。,8.1.2 使用约束实施数据完整性控制,3删除约束,【例8-10】删除CollegeMIS数据库中的SelectCourse表的外键约束fk_scStuNo(该约束在第5章中建立)。,USE CollegeMISGOALTER TABLE SelectCourse DROP CONSTRAINT fk_scStuNoGO,8.1.3 使用规则实
24、施数据完整性控制,规则概述:,规则:是一种数据库对象,与CHECK约束的作用基本相同,也是用来限制输入值的取值范围,从而实施域完整性控制。使用规则:首先要创建规则,然后把规则绑定到列上,或从列上解绑和删除。它与CHECK约束有以下几点不同:,(1)CHECK约束可以在建表时由CREATE TABLE语句将其作为表的一部分进行指定,而规则需要单独创建并绑定到列上;,(2)在一个列上只能应用一个规则,但是却可以应用多个CHECK约束。,(3)一个规则只需定义一次就可以被多次应用,可以应用于多个表或多个列,还可以应用到用户定义的数据类型上。,(4)可以在查询分析器中用SQL语句完成。,8.1.3 使
25、用规则实施数据完整性控制,1使用对象资源管理器管理规则,(1)规则的创建,【例8-11】为CollegeMIS数据库创建一个名为xb_rule规则,将它绑定到“学生”表的“性别”字段,保证输入数据只能为“男”或“女”,规则作为一种数据库对象,在使用前必须被创建。创建规则的SQL命令是CREATE RULE。其语法格式如下:CREATE RULE rule_name AS condition_expression其中:rule_name是规则的名称,命名必须符合SQL Server 2005的命名规则。condition_expression是条件表达式。,CREATE RULE xb_rule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 完整性 一致性 控制 约束 规则 触发器 事务
链接地址:https://www.31ppt.com/p-6578377.html