《第九章视图索引和数据完整性精选文档.ppt》由会员分享,可在线阅读,更多相关《第九章视图索引和数据完整性精选文档.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第九章视图索引和数据完整性第九章视图索引和数据完整性本讲稿第一页,共七十七页第九章第九章 视图、索引和数据完整性视图、索引和数据完整性v9.1 视图视图v9.2 索引索引 v9.3 数据完整性数据完整性本讲稿第二页,共七十七页9.1视图视图仓库号城市面积仓库号职工号工资仓库号城市职工号工资仓库号面积基本表视图视图是一个虚拟表视图是一个虚拟表,其内容由查询定义其内容由查询定义.本讲稿第三页,共七十七页1.视图视图的概念的概念视图是一个逻辑表,它允许操作者从其它表或视图存取数视图是一个逻辑表,它允许操作者从其它表或视图存取数据,视图本身不包含数据。视图的数据来源可以由以下任据,视图本身不包含数据。
2、视图的数据来源可以由以下任意一项组成:意一项组成:一个基表的任意子集。一个基表的任意子集。两个或者两个以上基表的合集。两个或者两个以上基表的合集。两个或者两个以上基表的交集。两个或者两个以上基表的交集。对一个或者多个基表运算的结果集合。对一个或者多个基表运算的结果集合。另一个视图的子集。另一个视图的子集。本讲稿第四页,共七十七页视图的优点和作用视图的优点和作用v将数据集中显示v简化数据操作v自定义数据v重新组织数据以便导入导出数据v组合分区数据本讲稿第五页,共七十七页视图的创建视图的创建v使用企业管理器创建视图v使用向导创建视图v使用SQL语句创建视图其命令格式如下:CREATEVIEWASW
3、ITHCHECKOPTIONWITHCHECKOPTION:通过视图进行的修改,必须也能通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如通过该视图看到修改后的结果。比如insertinsert,那么加的这条,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,只能删除视图里有显也必须能通过该视图看到;如果删除,只能删除视图里有显示的记录示的记录 本讲稿第六页,共七十七页定义视图的例子:定义视图的例子:CREATEVIEWv_empASSELECT职工号,工资,城市FROM职工,仓库WH
4、ERE职工.仓库号=仓库.仓库号;对用户就好象有一个表:对用户就好象有一个表:本讲稿第七页,共七十七页关于关于 With check optionvcreate view IS_studentasselect sno,sname,sagefrom studentwhere sdept=ISwith check option;v加上了with check option;后,不能执行插入操作:insert into is_student(sno,sname,sage)values(95100,李娜,12)本讲稿第八页,共七十七页使用视图使用视图v使用视图进行数据检索CREATEVIEWv_sal(
5、职工号,月工资,年工资)ASSELECT职工号,工资,工资*12FROM职工查询视图v_sal:SELECT*FROMv_sal结果:E1122014640E3121014520E4125015000E6123014760E7125015000本讲稿第九页,共七十七页v通过视图修改数据 当更新视图中的数据时,实际上是对表的内部数据进行更新。事实上,当从视图中插入或者删除时,情况也是这样。本讲稿第十页,共七十七页但并不是每个视图都是可更新的但并不是每个视图都是可更新的,应满足以下条件应满足以下条件:1)没有使用连接函数没有使用连接函数,集合运算函数和组函数。集合运算函数和组函数。2)SELECT
6、语句语句中没有有GROUPBY等子句。等子句。3)SELECT语句中不包含从基表列通过计算所得的列。语句中不包含从基表列通过计算所得的列。注意注意:只有当视图依赖的基本表为单个时只有当视图依赖的基本表为单个时,才可进行插入和删除数据才可进行插入和删除数据的操作的操作,修改操作一次修改数据操作只能变动一个基本表的数据修改操作一次修改数据操作只能变动一个基本表的数据.本讲稿第十一页,共七十七页v例如Create table table4(col1 int,col2 varchar(30)Create view view1 as select col2,col1 from table4GoInser
7、t into view1 values(第1行,1)goInsert into view1 values(第2行,2)Select*from table4go结果为:结果为:col1 col2-1 第1行2 第2行本讲稿第十二页,共七十七页视图的修改视图的修改v使用企业管理器v使用ALTER VIEW 语句v重命名视图 1、企业管理器 2、存储过程 sp_rename 例如:sp_rename view1,view2 view1为原来的名称 view2为新名称ALTERVIEWASWITHCHECKOPTION本讲稿第十三页,共七十七页视图信息的查询视图信息的查询v使用企业管理器v使用sp_h
8、elptext存储过程例如:use school go exec sp_helptext st2_degree 结果为:text -create view st2_degree as 本讲稿第十四页,共七十七页视图的删除视图的删除命令格式是:DROP VIEW v使用企业管理器v使用T-SQL 本讲稿第十五页,共七十七页实实 训训v建立视图view1,查询所有供应商的供应商号,名称和所在的城市,并按供应商号顺序排序。v建立视图view2,查询所有职工的平均工资。v建立视图view3,查询所有在北京的职工对应的订购单号和订购日期信息。v查看视图。v修改视图的属性。v视图的删除。v视图的重命名及显
9、示视图信息。本讲稿第十六页,共七十七页9.2索引索引1索引的概念 数据库中的索引与书籍中的索引类似。在一本书中,使用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是指某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。本讲稿第十七页,共七十七页索引的作用索引的作用(1)通过创建唯一索引,可以保证数据记录的唯一性。(2)可以大大加快数据检索速度。(3)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。(
10、4)在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。本讲稿第十八页,共七十七页索引的分类索引的分类(1)聚集索引 聚集索引对表和视图中的数据进行物理排序,然后再重新存储到磁盘上,这种索引对查询非常有效。表和视图中只能有一个聚集索引。当建立主键约束时,如果表中没有聚集索引,SQL Server会用主键列作为聚集索引键。用户可以在表的任何列或列的组合上建立索引,但一般是为定义成主键约束的列建立聚集索引。(2)非聚集索引 非聚集索引不用将表和视图中的数据进行物理排序。一般在那些经常被用
11、来查询的表的列上建立索引以获得最佳查询性能。但索引也需要占用空间,表越大,建立的包含该表的索引也越大。当一个含有索引的表被改动时,改动数据的速度会减慢,所以不要在表中建立太多且很少用到的索引。本讲稿第十九页,共七十七页创建索引创建索引v通过企业管理器创建索引v通过向导创建索引v通过SQL语句创建索引其语法格式如下:CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX 索引名 ON 表名|视图名 (列名 ASC|DESC ,.n )WITH PAD_INDEX,FILLFACTOR=fillfactor,IGNORE_DUP_KEY,DROP_EXISTING,S
12、TATISTICS_NORECOMPUTE,SORT_IN_TEMPDB ON filegroup 本讲稿第二十页,共七十七页l表名 用于指定创建索引的表的名称。l视图名 用于指定创建索引的视图的名称。lASC|DESC 用于指定具体某个索引列的升序或降序排序方向。lCLUSTERED 用于指定创建的索引为聚集索引。lNONCLUSTERED 用于指定创建的索引为非聚集索引。l索引名 用于指定所创建的索引的名称。l列名 用于指定被索引的列。l PAD_INDEX 用于指定索引中间级中每个页(节点)上保持开放的空间。lFILLFACTOR=fillfactor 用于指定在创建索引时,每个索引页的
13、数据占索引页大小的百分比,fillfactor的值为1到100。lIGNORE_DUP_KEY 用于控制当往包含于一个唯一聚集索引中的列中插入重复数据时SQL Server所作的反应。lDROP_EXISTING 用于指定应删除并重新创建已命名的先前存在的聚集索引或者非聚集索引。lSTATISTICS_NORECOMPUTE 用于指定过期的索引统计不会自动重新计算。lSORT_IN_TEMPDB 用于指定创建索引时的中间排序结果将存储在 tempdb 数据库中lON filegroup 用于指定存放索引的文件组。lUNIQUE 用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行。其中
14、:本讲稿第二十一页,共七十七页【例】使用CREATEINDEX语句在XSCJ数据库的“成绩表”上创建名为“IX_学号课号”的聚集、惟一、复合索引,该索引基于“学号”和“课程编号”列创建。在查询分析器中运行如下命令:USEXSCJGOCREATEUNIQUECLUSTEREDINDEXIX_学号课号ON成绩表(学号,课程编号)GO本讲稿第二十二页,共七十七页查看、修改索引1.使用企业管理器查看、修改索引2.使用系统存储过程查看、更名索引 系统存储过程sp_helpindex可以返回表的所有索引信息,其语法形式如下:sp_helpindex 表名称 另外,系统存储过程sp_rename可以用来更改
15、索引的名称,其语法形式如下:sp_rename 表名.旧索引名,新索引名本讲稿第二十三页,共七十七页【例6-17】使用系统存储过程sp_helpindex查看XSCJ数据库中“成绩表”的索引信息。在查询分析器中运行如下命令:USEXSCJGOsp_helpindex成绩表GO本讲稿第二十四页,共七十七页【例】使用系统存储过程将索引“PK_成绩表”更名为“IX_成绩表”。在查询分析器中运行如下命令:USEXSCJGOEXECsp_rename成绩表.PK_成绩表,IX_成绩表GO本讲稿第二十五页,共七十七页1.使用企业管理器删除索引要删除索引,可以在企业管理器中,从【管理索引】对话框中或者【表的
16、属性】对话框中,选择要删除的索引,单击【删除】按钮,即可删除索引。2.使用DROP INDEX命令删除索引当不再需要某个索引时,可以将其删除,DROP INDEX命令可以删除一个或者多个当前数据库中的索引,其语法格式如下:DROP INDEX table.index|view.index ,.n 其中:table|view用于指定索引列所在的表或索引视图;index用于指定要删除的索引名称。注意,DROP INDEX命令不能删除由CREATE TABLE或者ALTER TABLE命令创建的主键或者唯一性约束索引,也不能删除系统表中的索引。删除索引本讲稿第二十六页,共七十七页【例】删除“学生基本
17、信息表”中名为“IX_学生姓名”的索引。在查询分析器中运行如下命令:USE XSCJGODROP INDEX 学生基本信息表.IX_学生姓名GO本讲稿第二十七页,共七十七页1、创建各表索引:(1)基于订购单表的订购单号列创建名为IX_订购单号的聚集、唯一索引;(2)基于职工表的仓库号、职工号列创建名为IX_职工的非聚集、唯一索引;(3)基于供应商表的供应商号列创建名为IX_供应商的非聚集索引,并删除;2、显示索引信息。3、对索引进行重命名。实训本讲稿第二十八页,共七十七页9.3 数据完整性数据完整性v数据完整性的定义 数据完整性是指存放在数据库中的数据要满足的业务规则,是确保数据库的数据一致、
18、正确以及符合企业规则的一种思想。如年龄0150,性别男,女,成绩表中学号必须在学生基本信息表中存在等。这样可以保证有效的有意义的数据存放到数据库中。v完整性类型 数据完整性有四种类型:实体完整性、域完整性、引用完整性、用户自定义完整性。本讲稿第二十九页,共七十七页1实体完整性 实体完整性也可称为表的完整性,是指表中必须有一个主关键实体完整性也可称为表的完整性,是指表中必须有一个主关键字,用来惟一地标识表中的每一行,且不允许为空值(字,用来惟一地标识表中的每一行,且不允许为空值(NULL)。)。实体完整性强制表的标识符列或主键的完整性(通过索引、实体完整性强制表的标识符列或主键的完整性(通过索引
19、、UNIQUE约束、约束、PRIMARY KEY约束或约束或IDENTITY属性实现)。属性实现)。2.域完整性 域完整性也可称为列的完整性,是指给定列的输入有效性,用于限域完整性也可称为列的完整性,是指给定列的输入有效性,用于限制向表中输入的值的范围。强制域有效性的方法有:限制类型(通过制向表中输入的值的范围。强制域有效性的方法有:限制类型(通过类型)、格式(通过类型)、格式(通过CHECK约束和规则)或可能值的范围(通过约束和规则)或可能值的范围(通过FOREIGN KEY约束、约束、CHECK约束、约束、DEFAULT定义、定义、NOT NULL定定义和规则)。义和规则)。本讲稿第三十页
20、,共七十七页3.引用完整性引用完整性 引用完整性也称参照完整性,在输入或删除记录时,引用完整性保持表之间已定义的关系。在SQL Server2000中,引用完整性基于外键与主键之间或外键与唯一键之间的关系(通过FOREIGN KEY和CHECK约束)。4.引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。本讲稿第三十一页,共七十七页 强制引用完整性时,SQL Server禁止用户进行下列操作:l 当主表没有关联的记录时,将记录添加到相关表中。l 更改主表中的值并导致相关表中的记录孤立。l 从主表中删除记
21、录,但仍存在与该记录匹配的相关记录。4.4.用户自定义完整性用户自定义完整性 用户自定义完整性主要体现实际运用的业务规则中。例如,在“班级表”中,规定04届学生班级的“班级名称”前两个字符必须是04等。用户定义的完整性可以通过前面3种完整性的实施得到维护。本讲稿第三十二页,共七十七页使用约束实现数据完整性使用约束实现数据完整性PRIMARY KEYPRIMARY KEY约束约束 表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键(PK),通过它可强制表的实体完整性。当创建或更改表时可通过定义PRIMARY KEY约束来创建主键。注意,每个表有且只有一个PRI
22、MARY KEY约束,PRIMARY KEY约束中的列不能接受空值,系统在定义PK的列上自动建立唯一索引,主键可以是多列的组合。如果如果PRIMARY KEY约束定义在不止一列上,则一列中的值可以约束定义在不止一列上,则一列中的值可以重复,但重复,但PRIMARY KEY约束定义的所有列的组合的值必须唯一。约束定义的所有列的组合的值必须唯一。只有在进行联接或执行只有在进行联接或执行INSERT时才检查主键约束。时才检查主键约束。本讲稿第三十三页,共七十七页UNIQUE 约束 使用UNIQUE约束可以确保表中在非主键列中不输入重复值。尽管UNIQUE约束和PRIMARY KEY约束都强制惟一性,
23、但在强制下面的唯一性时应使用UNIQUE约束而不是PRIMARY KEY约束:l 非主键的一列或组合。l 一个表可以定义多个UNIQUE约束,而只能定义一个PRIMARY KEY约束。l 允许空值的列。l 允许空值的列上可以定义UNIQUE约束,但不能定义PRIMARY KEY约束。FOREIGN KEY约束也可以引用UNIQUE约束。本讲稿第三十四页,共七十七页图 设计表图【管理约束】对话框【例】为数据库【例】为数据库XSCJXSCJ中中“系部表系部表”的的“系部名称系部名称”列上创建列上创建UNIQUEUNIQUE约束。约束。方法一、在企业管理器中创建方法一、在企业管理器中创建UNIQUE
24、UNIQUE约束。可以按以下步骤操作:约束。可以按以下步骤操作:展开服务器,单击【数据库】,在展开数据库展开服务器,单击【数据库】,在展开数据库XSCJXSCJ后,单击【表】。后,单击【表】。右击【系部表】,在弹出的快捷菜单中单击【设计表】,打开如图右击【系部表】,在弹出的快捷菜单中单击【设计表】,打开如图9-19-1所示的设计表所示的设计表对话框。对话框。单击【管理约束】按钮,弹出如图所示的【管理约束属性】对话框,选择【索引单击【管理约束】按钮,弹出如图所示的【管理约束属性】对话框,选择【索引/键键】标签。】标签。本讲稿第三十五页,共七十七页单击【新建】按钮,在列名下选择【系部名称】,再在【
25、创建单击【新建】按钮,在列名下选择【系部名称】,再在【创建UNIQUE(U)】复选框上打】复选框上打,单击【,单击【约束】。约束】。单击【关闭】按钮,在设计窗口单击【保存】按钮后,关闭设计表对话框即可。单击【关闭】按钮,在设计窗口单击【保存】按钮后,关闭设计表对话框即可。本讲稿第三十六页,共七十七页方法二、在方法二、在SQL Server 2000中,也可用中,也可用ALTER TABLE命令来创建一命令来创建一个个UNIQUE约束。其语法为:约束。其语法为:ALTER TABLE table_nameADD CONSTAINT Constraint_name UNIQUE (Column,n
26、)在查询分析器中通过执行以下语句可以实现【例在查询分析器中通过执行以下语句可以实现【例7-2】的任务。】的任务。USE XSCJGOALTER TABLE 系部表系部表ADD CONSTRAINT UNI_stu_addr UNIQUE(系部名称系部名称)GO本讲稿第三十七页,共七十七页CHECK 约束 CHECK约束通过限制输入到列中的值来强制域的完整性。这约束通过限制输入到列中的值来强制域的完整性。这与与FOREIGN KEY约束控制列中数值相似。区别在于它们如何判断约束控制列中数值相似。区别在于它们如何判断哪些值有效:哪些值有效:FOREIGN KEY约束从另一个表中获得有效数值列表,约
27、束从另一个表中获得有效数值列表,CHECK约束从逻辑表达式判断而非基于其它表的数据。约束从逻辑表达式判断而非基于其它表的数据。可以通过任何基于逻辑运算符返回结果可以通过任何基于逻辑运算符返回结果TRUE或或FALSE的逻辑的逻辑(布尔)表达式来创建(布尔)表达式来创建CHECK约束。对单独一列可使用多个约束。对单独一列可使用多个CHECK约束。按约束创建的顺序对其取值。约束。按约束创建的顺序对其取值。只有当只有当INSERT、UPDATE时才检查时才检查CHECK约束。约束。本讲稿第三十八页,共七十七页图 设计“学生基本信息表”图 管理约束界面【例】为数据库【例】为数据库XSCJXSCJ中中“
28、学生基本信息表学生基本信息表”的的“性别性别”列上创建列上创建CHECKCHECK约束。约束。方法一、在企业管理器中创建方法一、在企业管理器中创建CHECKCHECK约束。可以按以下步骤操作:约束。可以按以下步骤操作:展开服务器,单击【数据库】,在展开数据库展开服务器,单击【数据库】,在展开数据库XSCJXSCJ后,单击【表】。后,单击【表】。右击【学生基本信息表】,在弹出的快捷菜单中单击【设计表】。右击【学生基本信息表】,在弹出的快捷菜单中单击【设计表】。单击【管理约束】按钮,弹出【管理约束属性】对话框,单击【单击【管理约束】按钮,弹出【管理约束属性】对话框,单击【CHECKCHECK约束】
29、标签。约束】标签。本讲稿第三十九页,共七十七页单击【新建】后,在【约束表达式】栏中添入单击【新建】后,在【约束表达式】栏中添入“性别性别=男男 OR 性别性别=女女”即可。即可。单击【关闭】按钮,在设计窗口单击【保存】按钮后,关闭设计表窗口。单击【关闭】按钮,在设计窗口单击【保存】按钮后,关闭设计表窗口。本讲稿第四十页,共七十七页方法二、在方法二、在SQL Server 2000中,也可用中,也可用ALTER TABLE命令来创建命令来创建一个一个CHECK约束。其语法为:约束。其语法为:ALTER TABLE table_nameADD CONSTAINT Constraint_name C
30、HECK logical_expression在查询分析器中通过执行以下语句可以实现【例在查询分析器中通过执行以下语句可以实现【例7-3】的任务。】的任务。USE XSCJGOALTER TABLE 学生基本信息表学生基本信息表ADD CONSTRAINT UNI_stu_addr CHECK(性别性别=男男 or 性别性别=女女)GO本讲稿第四十一页,共七十七页FOREIGN KEYFOREIGN KEY约束约束外键(外键(FOREIGN KEYFOREIGN KEY简写为简写为FKFK)是用于实现两个表之间数据联系的)是用于实现两个表之间数据联系的一个列或多个列的组合。通过将保存表中主键值
31、的一列或多列添一个列或多个列的组合。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的数据联系,这个列就成为加到另一个表中,可创建两个表之间的数据联系,这个列就成为第二个表的外键。当创建或更改表时可通过定义第二个表的外键。当创建或更改表时可通过定义FOREIGN KEYFOREIGN KEY约束约束来创建外键。来创建外键。建立建立FOREIGN KEYFOREIGN KEY约束后系统自动维护。约束后系统自动维护。1 1、修改父表主键时检查。、修改父表主键时检查。2 2、删除父表记录时检查。、删除父表记录时检查。3 3、在子表中插入数据时检查。、在子表中插入数据时检查。本讲稿第
32、四十二页,共七十七页【例】数据库【例】数据库XSCJ中以中以“系部表系部表”为父表,以为父表,以“班级表班级表”为子为子表,通过表,通过“系部编号系部编号”在在“班级表班级表”上建立上建立FORIGN KEY约束。约束。方法一、在企业管理器中创建外键约束。可以按以下步骤操作:方法一、在企业管理器中创建外键约束。可以按以下步骤操作:展开服务器,单击【数据库】,在展开数据库展开服务器,单击【数据库】,在展开数据库XSCJ后,单击后,单击【表】。【表】。右击【班级表】,在弹出的快捷菜单中单击【设计表】。如图右击【班级表】,在弹出的快捷菜单中单击【设计表】。如图 所示。所示。单击【管理关系】按钮,弹出
33、【管理关系属性】对话框。如图单击【管理关系】按钮,弹出【管理关系属性】对话框。如图 所示。所示。本讲稿第四十三页,共七十七页本讲稿第四十四页,共七十七页单击【新建】按钮,在【主键表单击【新建】按钮,在【主键表(P)】下方选择【系部表】后,再选择】下方选择【系部表】后,再选择【系部表】的主键【系部编号】,然后,在【外键表【系部表】的主键【系部编号】,然后,在【外键表(O)】下方选择【班】下方选择【班级表】后,再选择【班级表】中的列【系部编号】。如图级表】后,再选择【班级表】中的列【系部编号】。如图 所示。所示。单击【关闭】按钮,在设计窗口单击【保存】按钮,即可关闭设计表单击【关闭】按钮,在设计窗
34、口单击【保存】按钮,即可关闭设计表窗口。窗口。注意:在做注意:在做上述操作前,上述操作前,要先为要先为“系系部表部表”创建创建主键约束,主键约束,即即“系部编系部编号号”是系部是系部表的主键。表的主键。本讲稿第四十五页,共七十七页实实 训训v1.为供应商表的供应商名称建立唯一性(UNIQUE)约束.v2.为职工表的职工工资建立检查(CHECK)约束,工资范围在10003000之间.v3.为仓库表为父表,职工表为子表,在职工表上通过仓库号创建外键约束本讲稿第四十六页,共七十七页使用规则 规则也是实现数据完整性的方法之一。规则是独立于表的数据规则也是实现数据完整性的方法之一。规则是独立于表的数据库
35、对象,定义后需绑定到列或用户定义的数据类型。它类似于库对象,定义后需绑定到列或用户定义的数据类型。它类似于CHECK约束,但规则不能进行同表不同列之间的比较。它只能用约束,但规则不能进行同表不同列之间的比较。它只能用于检查单列。于检查单列。使用规则需要先创建规则,然后再将其绑定到列上或用户自定义的数使用规则需要先创建规则,然后再将其绑定到列上或用户自定义的数据类型上。删除规则前,也必须先删除该规则的绑定。据类型上。删除规则前,也必须先删除该规则的绑定。本讲稿第四十七页,共七十七页在在SQL Server 2000中,可以使用中,可以使用CREATE RULE语句和企业管理语句和企业管理器器2种
36、方法创建一个新的规则。种方法创建一个新的规则。1使用使用CREATE RULE语句创建规则语句创建规则其语法为:其语法为:CREATE RULE rule_nameAs condition_expression其中:rule_name:新规则的名称。规则名称必须符合标识符规则。可以选择是否指定规则所有者的名称。创建规则创建规则本讲稿第四十八页,共七十七页vcondition_expression:定义规则的条件表达式。条件表达式可以是 WHERE 子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符以及诸如 IN、LIKE、BETWEEN等关键字。条件表达式中包含一个局部变量,该变量
37、必须以符号 打头。【例】在数据库XSCJ上创建一个使性别输入只能是“男”或“女”的规则。在查询分析器中通过执行以下语句即可。CREATE RULE rule_sex AS sex in(男,女)GO本讲稿第四十九页,共七十七页2使用企业管理器创建规则。操作步骤为:使用企业管理器创建规则。操作步骤为:展开服务器,单击【数据库】,右击XSCJ,在弹出的快捷菜单中选择【新建】命令,在弹出的级联菜单中选择【规则】,出现创建规则对话框如图所示。本讲稿第五十页,共七十七页图 创建规则界面图 使用企业管理器创建规则本讲稿第五十一页,共七十七页在【名称】框内输入规则的名称,在【文本】框内输入规则的表达在【名称
38、】框内输入规则的名称,在【文本】框内输入规则的表达式。式。单击【确定】按钮即可。单击【确定】按钮即可。绑定规则绑定规则1使用企业管理器绑定规则。【例】将【例】将rule_sex规则绑定到规则绑定到“学生基本信息表学生基本信息表”的的“性别性别”列上。列上。使用企业管理器绑定规则,可以按以下步骤操作:使用企业管理器绑定规则,可以按以下步骤操作:在创建规则对话框(如图所示)中,单击【绑定列】,出现【将规在创建规则对话框(如图所示)中,单击【绑定列】,出现【将规则绑定到列】对话框。则绑定到列】对话框。本讲稿第五十二页,共七十七页在绑定列对话框上的【表】栏中选择【学生基本信息表】,在未绑定的在绑定列对
39、话框上的【表】栏中选择【学生基本信息表】,在未绑定的列中选择【性别】后,再单击【添加】按钮,单击【确定】即可完成规则列中选择【性别】后,再单击【添加】按钮,单击【确定】即可完成规则的绑定。的绑定。2 2用用sp_bindrulesp_bindrule存储过程绑定规则。其语法为:存储过程绑定规则。其语法为:sp_bindrule rulename=rule,objname=object_name其中:rulename=rule:由sp_bindrule过程创建的规则名称。rule 的数据类型为 nvarchar(776),无默认值。objname=object_name:绑定了规则的表和列或用户
40、定义的数据类型。object_name 的数据类型为 nvarchar(517),无默认值。如果 object_name 没有采取 table.column 格式,则认为它属于用户定义数据类型。默认情况下,用户定义的数据类型的现有列继承 rule,除非直接在列上绑定了规则。本讲稿第五十三页,共七十七页在查询分析器中,执行如下命令可实现将rule_sex规则绑定到【学生基本信息表】的【性别】列上:USE XSCJGOsp_bindrule rule_sex,学生基本信息表.性别GO 运行结果如图所示,已将rule_sex规则绑定到“学生基本信息表”的“性别”列上。本讲稿第五十四页,共七十七页 图
41、 使用sp_bindrule存储过程绑定规则本讲稿第五十五页,共七十七页解除绑定1使用企业管理器解除绑定规则在绑定列对话框的【绑定列】栏中,选择要解除绑定的列,单击【删在绑定列对话框的【绑定列】栏中,选择要解除绑定的列,单击【删除】按钮,单击【确定】即可完成解除绑定。除】按钮,单击【确定】即可完成解除绑定。2使用sp_unbindrule存储过程解除绑定规则其语法为:其语法为:sp_unbindrule objname=object_name其中:lobjname=object_name:是要解除规则绑定的表和列或者用户定义数据类型的名称。object_name 的数据类型为 nvarchar
42、(776),无默认值。如果参数不是 table.column 的形式,则假定 object_name 为用户定义数据类型。当为用户定义数据类型解除规则绑定时,所有属于该数据类型并具有相同规则的列也同时解除规则绑定。对属于该数据类型的列,如果其规则直接绑定到列上,则该列不受影响。本讲稿第五十六页,共七十七页【例】将rule_sex规则在【学生基本信息表】的【性别】列上的绑定解除。在查询分析器中执行如下命令:USE XSCJGOsp_unbindrule 学生基本信息表.性别GO运行结果如图所示,已将绑定的规则解除。本讲稿第五十七页,共七十七页本讲稿第五十八页,共七十七页删除规则删除规则1使用企业
43、管理器删除规则。可按以下步骤操作:使用企业管理器删除规则。可按以下步骤操作:展开服务器,单击【数据库】,选择指定数据库展开服务器,单击【数据库】,选择指定数据库XSCJ,单击【规则】,单击【规则】,在要删除的规则上单击鼠标右键,在弹出的快捷菜单中选择【删除】,出在要删除的规则上单击鼠标右键,在弹出的快捷菜单中选择【删除】,出现删除规则对话框,如图现删除规则对话框,如图7-21所示。所示。单击【全部除去】按钮即可。单击【全部除去】按钮即可。本讲稿第五十九页,共七十七页2使用使用DROP RULE命令删除规则命令删除规则其语法为:DROP RULE rule ,.n 其中:vrule:要删除的规则
44、名称。vn:表示可以指定多个规则。v例如:在查询分析器中执行命令DROP RULE rule_sex即可将规则rule_sex删除。使用默认值使用默认值 默认值对象是为特定数据库定义的。使用默认值可以实现当用户向数据库表中插入新记录时,如果没有给定某列的输入值,则由SQL Server系统自动为该列输入默认值的功能。通过将其绑定到默认值要应用的某个列上,它可为不同表的列所共享。本讲稿第六十页,共七十七页默认值可以是常量、内置函数或数学表达式。默认值可以是常量、内置函数或数学表达式。与规则类似,需要将默认值绑定到用户列或用户自定义数据类型上,它与规则类似,需要将默认值绑定到用户列或用户自定义数据
45、类型上,它才能为列和用户自定义数据类型提供默认值。才能为列和用户自定义数据类型提供默认值。创建默认值创建默认值语法如下:CREATE DEFAULT defaultAS constant_expression其中:Default:默认值的名称。可以选择是否指定默认值所有者名称。本讲稿第六十一页,共七十七页v constant_expression:只包含常量值的表达式(不能包含任何列或其它数据库对象的名称)。可以使用任何常量、内置函数或数学表达式。字符和日期 常量用单引号()引起来;货币、整数和浮点常量不需要使用引号。二进制数据必须以 0 x 开头,货币数据必须以美元符号($)开头。默认值必须
46、与列数据类型兼容。【例】在数据库XSCJ中创建默认值对象default_zz,其默认值为“群众”。在查询分析器中,执行如下命令:USE XSCJGOCREATE DEFAULT default_zzAS 群众GO本讲稿第六十二页,共七十七页绑定默认值绑定默认值语法如下:sp_bindefault defname=default,objname=object_name本讲稿第六十三页,共七十七页v其中:vdefname=default:由 CREATE DEFAULT 语句创建的默认名称。default 的数据类型为 nvarchar(776),无默认值。vobjname=object_name
47、:要绑定默认值的表和列名称或用户定义的数据类型。object_name 的数据类型为 nvarchar(517),无默认值。如果 object_name 没有采取 table.column 格式,则认为它属于用户定义数据类型。默认情况下,用户定义数据类型的现有列继承 default,除非默认值直接绑定到列中。默认值无法绑定到 timestamp 数据类型的列、带 IDENTITY 属性的列或者已经有 DEFAULT 约束的列。本讲稿第六十四页,共七十七页【例】将默认值对象【例】将默认值对象default_zz绑定到绑定到“学生基本信息表学生基本信息表”的的“政治政治面貌面貌”列上。列上。在查询
48、分析器中,执行如下命令:在查询分析器中,执行如下命令:USE XSCJGOsp_bindefault default_zz,学生基本信息表学生基本信息表.政治面貌政治面貌GO运行结果如图所示运行结果如图所示。本讲稿第六十五页,共七十七页解除绑定解除绑定语法如下:sp_unbindefault objname=object_name,futureonly=futureonly_flagv其中:vobjname=object_name:要解除默认值绑定的表和列或者用户定义数据类型的名称。object_name 的数据类型为 nvarchar(776),无默认值。如果参数不是 table.colum
49、n 的形式,则假定 object_name 为用户定义数据类型。当为用户定义数据类型解除默认值绑定时,所有属于该数据类型并具有相同默认值的列也同时解除默认值绑定。对属于该数据类型的列,如果其默认值直接绑定到列上,则该列不受影响。本讲稿第六十六页,共七十七页在查询分析器中执行如下命令在查询分析器中执行如下命令:USE XSCJGOsp_unbindefault 学生基本信息表学生基本信息表.政治面貌政治面貌GO运行结果如图所示。运行结果如图所示。【例】将【例】将“学生基本信息表学生基本信息表”的的“政治面貌政治面貌”列上绑定的默认值列上绑定的默认值对象对象default_zz解除。解除。本讲稿第
50、六十七页,共七十七页删除默认值删除默认值语法如下:DROP DEFAULT default ,.n 其中:vdefault:现有默认值的名称。若要查看现有默认值的列表,可执行 sp_help。vn:表示可以指定多个默认值的占位符。【例】将数据库XSCJ中的默认值对象default_zz删除。在查询分析器中执行如下命令,即可删除绑定:USE XSCJGODROP DEFAULT default_zzGO本讲稿第六十八页,共七十七页用户自定义数据类型用户自定义数据类型如果如果SQL Server提供的系统数据类型不能满足设计需要,用户就可提供的系统数据类型不能满足设计需要,用户就可以在以在SQL