第8章-索引-完整性-讲解剖课件

上传人:仙*** 文档编号:241647793 上传时间:2024-07-12 格式:PPT 页数:62 大小:1.19MB
返回 下载 相关 举报
第8章-索引-完整性-讲解剖课件_第1页
第1页 / 共62页
第8章-索引-完整性-讲解剖课件_第2页
第2页 / 共62页
第8章-索引-完整性-讲解剖课件_第3页
第3页 / 共62页
点击查看更多>>
资源描述
第8章 索引与数据完整性2数据库中的索引与书籍中的索引类似。n在一本书中,利用索引(目录)可以快速查找所需信息,无须阅读整本书。n在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。当创建数据库并优化其性能时,应该为数据查询所使用的表列创建索引。8.1 索引索引 38.1.1 索引的概念索引的概念 简单地说,索引是表中某列(或某些列)的值以某种顺序(升/降)排列后与其行记录的存储位置的指向指针之间的对照表。4记录号3245 1姓名升序值李 刘 王 张 赵记录号24135平均分升序值60 80 85 89 90“平均分”索引“姓名”索引学生表学生表记录号学号姓名性别专业平均分105001赵男自动化 85205002刘女自动化 60305003李男管理89405004王女自动化 80505005张女管理90在有序的较小的范围内(索引上)查找数据,可快速定位要找的数据记录上。5 数据按照输入的时间顺序堆放到数据页上索引页SQLServer一个表数据页索引是一个树状数据结构,索引页上的指针指向数据页。62创建索引的优点创建索引的优点n大大加快数据的检索速度,是创建索引的最主要的原因。n创建唯一性索引,保证数据库表中每一行数据的唯一性。n加速表和表之间的连接,特别是在实现数据的参考完整性方面。n在使用GROUP BY分组子句和ORDER BY排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。n通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。7增加索引也有缺点:增加索引也有缺点:n创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。n索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。n当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就增加了系统的负担,降低了数据的维护速度。权衡:n要从UPDATE与SELECT两方面考虑,查询需求大于更新需求时,要索引,反之不要索引.8 查询频度高查询频度高,数据量大的表考虑建索引数据量大的表考虑建索引考虑建索引的列:考虑建索引的列:n作为主键的列;n经常需要搜索的列;n经常用于连接的列;nWHERE子句中经常使用的列;n经常需要排序的列;n经常需要根据范围进行搜索的列。3选择创建索引的参考原则9不考虑建索引的列不考虑建索引的列一个表不宜建立太多的索引一个表不宜建立太多的索引,因为增删改牵涉因为增删改牵涉到调整索引,不适合建立索引的列:到调整索引,不适合建立索引的列:n在查询中很少使用或者参考的列;n有大量重复值的列。如只有 1 和 0,此时直接进行表扫描更有效;n定义为TEXT、NTEXT、IMAGE或BIT等数据类型的列;n当列的增删改操作远远多于检索操作时。10索引的使用索引的使用n由系统自动选择,自动维护,不用用户操心,但有加快查询速度的索引才会被使用,否则,系统不予采纳,因此,不利的索引只会增加系统的维护成本.118.1.2 索引的类型n单列索引:只有一列进行索引n复合索引:由多列组成的索引n唯一(UNIQUE)索引:确保索引的列值没有重复值n聚集索引(CLUSTERED):也叫簇索引.会改变表中记录的物理存储顺序,表的记录不再按输入记录的先后排列,而是按索引的顺序存放.n非聚集索引(NONCLUSTERED):表中记录的物理顺序并不改变,系统将使用索引页来创建一个索引结构,用以表示行的逻辑顺序。12关于关于SQL Server的数据存储的数据存储堆堆127号扩展盘区128号扩展盘区129号扩展盘区010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.0102030405ConFunkWhiteDurkinLang.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.0102030405DunnRandallOtaSlichterLaBrie.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203GraffBaconKoch.130号扩展盘区01020304SeattleParisTokyoAtlanta.堆堆-数据页是无序的堆集存放数据页是无序的堆集存放扩展盘区扩展盘区(8 个连续页,每页个连续页,每页 8 KB,每页可放置每页可放置1n行数据。)行数据。)13索引结构索引结构141.不使用索引时不使用索引时在堆中查找行在堆中查找行堆堆127号扩展盘区idindid=0FirstIAMsysindexesIAM128号扩展盘区129号扩展盘区010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.0102030405ConFunkWhiteDurkinLang.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.0102030405DunnRandallOtaSlichterLaBrie.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203ConFunkWhite.010203SmithOtaJones.01020304AkhtarFunkSmithMartin.010203RuddWhiteBarr.010203GraffBaconKoch.130号扩展盘区01020304SeattleParisTokyoAtlanta.127 1128 1129 0130 1扩展盘区扩展盘区 位图位图SQLServer查询sysindexes表,找到IAM页,然后顺序查找表的所有页未索引值为0索引分配映射表(IAM)页映射数据库文件中由堆集或索引使用的扩展盘区。未索引,未索引,IAM指向指向有数据的扩展盘区有数据的扩展盘区15 非叶级非叶级Page12-RootPage37Page28叶级叶级(键值)Page41Page51Page61Page71Akhtar.MartinAkhtarBarrConFunkFunk4:706:014:705:034:704:014:706:024:704:02MartinSmith.SmithSmithSmithWhiteWhite4:706:034:708:044:707:014:704:034:705:02AkhtarGanio.GanioHallJonesJonesJones4:709:014:709:044:709:024:708:034:707:03堆堆Page707Page808Page70901020304.AkhtarFunkSmithMatey.Page704Page705Page706010203.ConnFunkWhite.010203.RuddWhiteBarr.010203.SmithOtaJones.01020304.MartinPhuaJonesSmith.010203.GanioJonesHall.MartinMateyOtaPhuaRudd4:708:014:706:044:707:024:708:024:705:01非聚集索引非聚集索引File ID#42.2.使用非聚集索引,在堆中查找行使用非聚集索引,在堆中查找行idindid=2rootsysindexesSELECT lastname,firstnameFROM memberWHERE lastnameBETWEEN Masters AND Rudd 非叶级非叶级第12页根第37页第28页叶级叶级(键值)第41页第51页第61页第71页Akhtar.MartinAkhtarBarrConFunkFunk4:706:014:705:034:704:014:706:024:704:02MartinSmith.SmithSmithSmithWhiteWhite4:706:034:708:044:707:014:704:034:705:02AkhtarGanio.GanioHallJonesJonesJones4:709:014:709:044:709:024:708:034:707:03堆堆第707页第708页第709页01020304.AkhtarFunkSmithMatey.第704页第705页第706页010203.ConnFunkWhite.010203.RuddWhiteBarr.010203.SmithOtaJones.01020304.MartinPhuaJonesSmith.010203.GanioJonesHall.MartinMateyOtaPhuaRudd4:708:014:706:044:707:024:708:024:705:01非聚集索引非聚集索引File ID#4MartinMartinMartinMartin0404.MateyMateyMateyMatey 4:706:044:706:040202.PhuaPhuaPhuaPhua4:708:024:708:020101.RuddRuddRuddRudd4:705:014:705:010202.OtaOtaOtaOta 4:707:024:707:02非聚集索引值为216使用非聚集索引,在堆中查找行使用非聚集索引,在堆中查找行n非聚集索引非聚集索引l索引里的指针指出特定项在表中的存储位置索引里的指针指出特定项在表中的存储位置lSQL Server 的索引组织成的索引组织成 B 树的结构树的结构l索引中的每页称为一个索引节点。索引中的每页称为一个索引节点。l叶节点包含行定位器叶节点包含行定位器,指针指向持有键值的数据行。每个,指针指向持有键值的数据行。每个指针(即行标识符)由文件标识符、页码和页上的行数构指针(即行标识符)由文件标识符、页码和页上的行数构成成173.使用使用聚集索引聚集索引,在聚集索引在聚集索引页页中查找行中查找行idindid=1rootsysindexes聚集索引值为118在聚集索引中查找行在聚集索引中查找行 n聚集索引就好像电话簿一样,同姓的人聚集在电话簿上聚集索引就好像电话簿一样,同姓的人聚集在电话簿上的同一块地方的同一块地方n聚集索引也是采用聚集索引也是采用B树结构,和非聚集索引类似树结构,和非聚集索引类似l聚集索引B树结构的叶节点就是索引的数据页l聚集索引的数据行是排序的,按照它们的聚集索引键顺序存储n聚集索引的键值应尽量小,使得一个索引页能装入更多聚集索引的键值应尽量小,使得一个索引页能装入更多的索引行,从而提高性能的索引行,从而提高性能19Last Name上的聚集索引上的聚集索引First Name上的非聚集上的非聚集索引索引非叶级非叶级叶级叶级(聚集键值)AaronDeannaAaron.JoseJoseNinaDeannaDonDougDaumHallHamptonAaronAdamAmieConBarrBaldwinJoseJudyMikeLugoKaethlerNashBarrAdamCoxDaumArletteDeannaKimKobaraLaBrieShaneLindaRyanNagataNashNixonSusanneMikeTobyBarrKimNagataOMelia4.使用基于聚集索引的非聚集索引,使用基于聚集索引的非聚集索引,在聚集索引页中查找行在聚集索引页中查找行idindid=2rootsysindexesSELECT lastname,firstname,phoneFROM memberWHERE firstname=Mike 姓氏上的姓氏上的聚集索引聚集索引名字上的名字上的非聚集索引非聚集索引非叶级非叶级叶级叶级(聚集键值)AaronDeannaAaron.JoseJoseNinaDeannaDonDougDaumHallHamptonAaronAdamAmieConBarrBaldwinJoseJudyMikeLugoKaethlerNashBarrAdamCoxDaumArletteDeannaKimKobaraLaBrieShaneLindaRyanNagataNashNixonSusanneMikeTobyBarrKimNagataOMeliaMikeMikeNashNashNagataNagataNashNashMikeMike20使用基于聚集索引的非聚集索引查找行使用基于聚集索引的非聚集索引查找行n当在已经有聚集索引的表上建立非聚集索引的时候,每当在已经有聚集索引的表上建立非聚集索引的时候,每个非聚集索引的行指示器包含了行的聚集索引键值个非聚集索引的行指示器包含了行的聚集索引键值n当在同一张表上使用聚集索引和非聚集索引的时候,两当在同一张表上使用聚集索引和非聚集索引的时候,两类索引的类索引的B树结构都要被遍历,这产生了额外的树结构都要被遍历,这产生了额外的I/O操操作作n由于聚集索引的键值通常大于堆使用的八字节的行标识由于聚集索引的键值通常大于堆使用的八字节的行标识符,建立在聚集索引上的非聚集索引通常比建立在堆上符,建立在聚集索引上的非聚集索引通常比建立在堆上的要大的要大21聚集索引与非聚集索引的对比聚集索引与非聚集索引的对比n聚集索引存取速度快,适合于主码,一个表只能建立一个聚集索引,即按一种物理顺序存放n非聚集占用空间占用多,可以建立多个非聚集索引.注意:最好在创建表时创建聚集索引,以免引起数据的移动重组,最好在作好了聚集索引后再做非聚集索引,以免重建非聚集索引.228.1.3 索引的创建与管理1.利用管理平台创建索引:展开表对象,展开索引新建索引2.使用Transact-SQL语句中的CREATE INDEX命令创建索引。注意:创建主键约束或唯一约束时,系统会自动创建唯一索引.如果表中已有数据,再创建索引时,系统将检查合法性,如不合法,则创建索引失败.SQL Server 创建索引的方法创建索引的方法23创建索引的创建索引的CREATE INDEX命令命令CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX 索引名 ON 表名称|视图名 (列名 ASC|DESC ,.n )WITH ,.n ON 文件组其中:ASC|DESC:用于指定具体某个索引列的升序或降序排序方向 可为:PAD_INDEX|FILLFACTOR|DROP_EXISTING|IGNORE_DUP_KEY 24nFILLFACTOR(填充因子):设置合适的填充因子将获得更好的性能,因子在0100。如果初始数据只占最终数据的20%,则可设置填充因子为20%,意味着预留空间,以免以后装不下导致要拆分页.影响性能.nPAD_INDEX:指定中间页节点保持开放的空间。与FILLFACTOR配合。nIGNORE_DUP_KEY,在创建了唯一索引后,将忽略(接受但回滚操作/不接受即拒绝操作)插入的重复值。nDROP_EXISTING ,重建已存在的索引25聚集索引与非聚集索引的效果显示聚集索引与非聚集索引的效果显示n执行select*into xs_kc1 from xs_kcn在xs_kc1表上,创建学号的聚集索引,打开表显示顺序n删除学号的聚集索引。在xs_kc1表上创建课程号的聚集索引,打开表显示顺序268.1.2 索引的创建索引的创建【例例1】为KC表的课程名列创建索引。/*使用简单索引*/USECJGLIFEXISTS(SELECTnameFROMsysindexesWHEREname=kc_name_ind)DROPINDEXKC.kc_name_indGOCREATEINDEXkc_name_indONKC(课程名)GO278.1.2 索引的创建索引的创建【例例3】根据XS_KC表的学号列和课程号列创建复合索引。/*使用简单组合索引*/USECJGLCREATEINDEXxs_kc_indONXS_KC(学号,课程号)【例例2】根据KC表的课程号列创建唯一聚集索引/*使用唯一聚集索引*/USECJGLCREATEUNIQUECLUSTEREDINDEXkc_id_indONKC(课程号)-指定CLUSTERED,将对磁盘上的数据进行物理排序。28【例例5】根据学号列创建唯一聚集索引。如果输入了重复的键,将忽略该INSERT或UPDATE语句。/*将XS表复制一部分数据到XS1表*/SELECT*INTOXS1FROMXS/*未使用IGNORE_DUP_KEY*/CREATEUNIQUECLUSTEREDINDEXxs_idONXS1(学号)insertxs1(学号,姓名)values(082202,章)反应:不能在具有唯一索引xs_ind的对象dbo.xs1中插入重复键的行。语句已终止/*使用IGNORE_DUP_KEY*/CREATEUNIQUECLUSTEREDINDEXxs_idONXS1(学号)WITHIGNORE_DUP_KEYinsertxs1(学号,姓名)values(082202,章)反应:已忽略重复的键。(0行受影响)29【例例6】为成绩表XS_KC创建“学号+课号”的唯一聚集索引myindex1,具有50的填充因子,指定中间页节点保持开放的空间,并重建已存在的索引SELECT*INTO XS1_KC FROM XS_KCCREATE UNIQUE CLUSTERED INDEX myindex1 ON XS1_KC(学号,课程号)WITH PAD_INDEX,FILLFACTOR=50CREATEUNIQUECLUSTEREDINDEXmyindex1ONXS1_KC(学号,课程号)WITHPAD_INDEX,FILLFACTOR=50,DROP_EXISTING30删除索引n选择索引右键删除n命令:DROP INDEX 表名.,n【例8.13】删除 CJGL数据库中表XS的一个索引名为 st_id_ind 的索引。USE CJGL IF EXISTS(SELECT name FROM sysindexes WHERE name=st_id_ind)DROP INDEX XS.st_id_indGOn注意:除去聚集索引将导致重建所有非聚集索引。删除视图或表时,自动删除在视图或表上永久性和临时性创建的所有索引。31习 题 P190 二、1,28.2 SQL Server的数据完整性的数据完整性33 完整性类型完整性类型:实施途径实施途径n实体完整性:主键,唯一(索引/约束),标识列 n域完整性:默认,检查约束,外键,数据类型,规则n参照完整性:外键,检查约束,触发器,存储过程n用户自定义完整性:约束,规则,触发器,存储过程n下面主要介绍约束、默认、规则。第9章介绍触发器,存储过程。使用约束优先于规则,触发器SQL SERVER完整性的实施途径完整性的实施途径IDENTITY34SQL Server的数据完整性的数据完整性358.2.1 使用约束实施完整性使用约束实施完整性 n在SQL Server 2000中有6种约束constraint,它们是在建表和修改表时创建的,它与表定义一起存储,一同删除,自动强制实施.空值约束 (Null/not null)主键约束(primary key constraint)唯一性约束(unique constraint)检查约束(check constraint)默认约束(default constraint)外部键约束(foreign key constraint)36创建约束创建约束nCREATE TABLE 是在创建表时创建约束nALTER TABLE 是在一个已有的表上创建约束37create table和和alter table创建约束创建约束create table 成绩表(学号 char(6),课程编号 char(6),成绩 int,constraint pk_成绩 primary key(学号,课程编号)/*设置组合主键*/)alter table 成绩表add constraint pk_成绩 primary key(学号,课程编号)38ALTER TABLE命令有关约束部分的语法命令有关约束部分的语法ALTER TABLE 表名 WITH CHECK|WITH NOCHECK ADD,n /*增加约束*/|DROP CONSTRAINT约束名,n /*删除约束*/|CHECK|NOCHECK CONSTRAINT ALL|约束名,.n /*启用或暂停约束*/39表级约束部分的语法表级约束部分的语法 CONSTRAINT 约束名 PRIMARY KEY|UNIQUE CLUSTERED|NONCLUSTERED (列名 ,.n )|FOREIGN KEY(列名 ,.n )REFERENCES 参照表名 (参照列名 ,.n )ON DELETE CASCADE|NO ACTION ON UPDATE CASCADE|NO ACTION|DEFAULT 常量表达式 FOR 列名 WITH VALUES|CHECK(逻辑表达式)40FOREIGN KEY约束约束n如果子表某列与父表已有 PRIMARY KEY 约束或 UNIQUE 约束的列相关联,则可在子表添加 FOREIGN KEY 约束。nFOREIGN KEY 约束包含一个 CASCADE|NO ACTION 选项,NO ACTION 是默认值。它们的作用如下:nCASCADE 表示级联参照完整性,允许将 UNIQUE列或者 PRIMARY KEY 列的值的修改自动传递到引用它的外键上。例如,当定义了XS_KC表的外键学号参照XS表的主键学号时,我们希望在XS表中改变学号值时XS_KC表的学号值也相应改变,就可以使用CASCADE选项。nNO ACTION 表示任何企图删除(ON DELETE)或者更新(ON UPDATE)被外键所引用的主键的操作都将引发一个错误,对数据的改变会被回滚。41修改表修改表时施加约束时施加约束假定有学生表、课程表、成绩表,表中都有下面语句中涉及的列名。(1)alter table 成绩表 add constraint pk_序号序号 primary key(序号)(2)alter table 课程表add constraint uq_课程名课程名 unique(课程名)/*设置唯一约束*/(3)alter table 课程表alter column 类别 nchar(4)not null /*空值约束,只能通过修改列来设置*/42修改表修改表时施加约束时施加约束(4)alter table 学生表with nocheck /*现有数据不强制这个约束*/add Constraint ck_联系电话联系电话check(联系电话 like 027 0-90-90-90-90-90-90-90-9)/*设置检查约束,规定联系电话只能输入027+8位09之间的数字*/(5)alter table 学生表 add constraint df_籍贯籍贯 default 湖北省 for 籍贯注意写法43修改表修改表时施加约束时施加约束(6)Alter table 成绩表Add constraint fk_成绩表成绩表_学号学号 Foreign key(学号)references 学生表(学号)on update cascade,constraint fk_成绩表成绩表_课号课号 Foreign key(课号)references 课程表(课号)on update cascade主键值修改了,外键值也级联修改44默认约束默认约束DEFAULTn在添加一个默认约束时,可以使用参数WITH VALUES,它表示用默认值填充表中已有行的新列。【例】修改表XS1,为“入学日期”设置默认值约束为系统当前日期。USE CJGLALTER TABLE xs1 ADD CONSTRAINT date_dflt DEFAULT getdate()FOR 入学日期 WITH VALUES /*WITH VALUES用默认值当前日期填充表中已有行的新列*/默认值约束名45解释以下语句作用解释以下语句作用alter table 课程表add Constraint ck _类别类别 check(类别 in(公共基础课,选修课,专业基础课,专业课)46 478.2.3 使用使用默认默认实施数据的完整性实施数据的完整性n所有约束所有约束是依附于表而存在,是在创建表创建表和修改表修改表时定义的.n默认对象默认对象DEFAULT则不依附于表而存在,此处的默认不是默认约束,而是单独存储的数据库对象,当用户向绑定有默认值的列进行增删改时,将由默认检查其完整性.n可以说,默认对象是将默认约束从表定义中抽出来,将应用面扩大可以将同一个默认用于多个表,更便于管理和使用.n使用默认的方法使用默认的方法:创建默认对象后必须将其绑定到某个列,不用时解除绑定,并删除.n创建:CREATE DEFAULT 默认名 AS 常量表达式常量表达式n绑定:SP_BINDEFAULT 默认名,表名.列名n解除绑定:SP_UNBINDEFAULT 表名.列名n删除:DROP DEFAULT 默认名 ,n 48默认值对象的定义、使用默认值对象的定义、使用【例8.4】默认对象的创建与绑定使用举例。CREATE DEFAULT dfo_zym AS 计算机 GOCREATE DEFAULT dfo_cj AS 0 GO/*将默认对象dfo_zym绑定到xs表的专业名列上*/EXEC sp_bindefault dfo_zym,xs.专业名 /*将默认对象dfo_cj绑定到xs_kc表的成绩列上*/EXEC sp_bindefault dfo_cj,xs_kc.成绩 GO49解除绑定关系,删除默认值对象【例8.5】默认对象的解除与删除使用举例。USE CJGLGOEXEC sp_unbindefault xs.专业名 /*解除xs表的专业名列上默认对象的绑定*/EXEC sp_unbindefault xs_kc.成绩 GODROP DEFAULT dfo_zym,dfo_cj /*删除名为dfo_zym和dfo_cj的默认对象*/GO50默认对象练习默认对象练习1.创建一个默认对象,默认值为男,并绑定到职员表的性别列上2.创建一个默认对象,默认值为300,并绑定到工资表的津贴列上。51默认对象示例默认对象示例Create default dfo_xb as 男男Create default dfo_jt as 300GOSP_bindefault dfo_xb,职员表.性别SP_bindefault dfo_jt,工资表.津贴 528.2.4 规则n规则规则也也是类似于默认的单独存储的数据库对象,可以说,规则对象是将检查约束从表定义中抽出来,将应用面扩大,即规则可以应用于多个具有同样要求的表中。更便于管理和使用.n当用户向绑定有规则的列进行增删改时,规则将检查其完整性.使用规则的方法使用规则的方法:创建规则对象后,将其绑定到某个列,不用时解除绑定,也可单独的删除.n创建:CREATE RULE 规则名 AS 条件条件n绑定:SP_BINDRULE 规则名,表名.列名n解除绑定:SP_UNBINDRULE 表名.列名n删除:DROP RULE 规则名 ,n 53说明:说明:n“规则名”必须符合标识符的规则。n定义规则的“条件”,可以是 WHERE 子句中任何有效的表达式。n条件表达式包含一个局部变量(前面有符号标志)。该变量引用某个列的值(通过 UPDATE 或 INSERT 语句输入的值)。54【举例举例】创建规则创建规则,绑定规则绑定规则USE CJGL CREATE RULE rscore as score=0 AND score=150GOSP_BINDRULE rscore,xs_kc.成绩 SP_BINDRULE rscore,xs.身高 SP_BINDRULE rscore,职员.年龄 GO 局部变量score55【例4】创建一个规则,限制实际值为只能是该规则中列出的值。create rule list_rule as list in(1389,0736,0877)【例5】创建规则:第三个字符是连字符,并以一个09结束。create rule pattern_rule As value like _ _-%0-956-用两种方法,修改表建立约束,或者建立规则,实现对课程号的限制要求:输入范围为1-50-90-9。n第一种:用修改表建立约束的方法:ALTER TABLE KC ADD CONSTRAINT CK_KCH CHECK(课程号 LIKE 1-50-90-9 )n第二种:用建立规则的方法:USE CJGLCREATE RULE kc_rule AS range like 1-50-90-9 GOEXEC sp_bindrule kc_rule,KC.课程号GO【练习练习】57本本 章章 小小 结结n正确地在查询中使用索引可以极大地提高系统的性能n索引分为聚集索引和非聚集索引,用CREATE INDEX 命令或者管理平台可以直接创建索引。n在索引创建以后,也需要进行维护,维护工作主要包括显示索引的碎块信息、整理碎片、重建索引等。索引优化向导可以帮助选择并且创建一个最优化的索引组合。58 n数据完整性控制主要有数据类型、约束、规则、默认、触发器和存储过程等途径;n约束和表一起定义;n默认和规则作为独立的对象存储,通过绑定与一个或多个表的列关联,是完整性控制的补充。nCHECK 约束是用来限制列值的首选标准方法。CHECK 约束比规则更简明,一个列只能应用一个规则,但是却可以有多个 CHECK 约束。59习 题 P190 二、3560611.创建一个规则,要求联系电话号码为3位区号,-,至少6位号2.创建一个规则,并绑定到表KC的课程号列,用于限制课程号3位数的输入范围为1-50-90-9。3.创建一个规则,并绑定到表KC的课程名上,要求只能是以下课程名:C语言,离散数学,微机原理【练习练习】创建规则创建规则,绑定规则绑定规则62 2.USECJGLCREATERULEkc_ruleASrangelike1-50-90-9GOEXECsp_bindrulekc_rule,KC.课程号GO3.USECJGLCREATERULElist_ruleASlistIN(C语言,离散数学,微机原理)GOEXECsp_bindrulelist_rule,KC.课程名
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!