资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
掌握如何创建索引掌握如创创建触发器掌握常用的存储过程什么是索引l汉语字典中的汉字按页存放,一般都有汉语 拼音目录(索引)、偏旁部首目录等l我们可以根据拼音或偏旁部首,快速查找某 个字词Indexes Use Key Values to Locate Data (根据索引键查找定位数据行) Data Pages(数据页) Index Pages(索引页)什么是索引什么是索引lSQL Server中的数据也是按页( 8KB )存放l索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据 。l索引页:数据库中存储索引的数据页;索引页类似于 汉语字(词)典中按拼音或笔画排序的目录页。l索引的作用:通过使用索引,可以大大提高数据库的 检索速度,改善数据库性能。唯一索引:唯一索引不允许两行具有相同的索引值主键索引:为表定义一个主键将自动创建主键索引,主键 索引是唯一索引的特殊类型。主键索引要求主键中的每个 值是唯一的,并且不能为空聚集索引(Clustered):表中各行的物理顺序与键值的逻辑 (索引)顺序相同,每个表只能有一个非聚集索引(Non-clustered):非聚集索引指定表的逻辑 顺序。数据存储在一个位置,索引存储在另一个位置,索 引中包含指向数据存储位置的指针。可以有多个,小于 249个l 演示使用企业管理器创建CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX index_nameON table_name (column_name)WITH FILLFACTOR=xUNIQUE表示唯一索引,可选 CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选 FILLFACTOR表示填充因子,指定一个0到100之间的值, 该值指示索引页填满的空间所占的百分比l 使用T-SQL语句创建索引的语法: 唯一索引聚集索引或非聚集索引填充因子(系数):指定一个0100之 间的值,表示索引页填充的百分比优点 加快访问速度 加强行的唯一性缺点 带索引的表在数据库中需要更多的存储空间 操纵数据的命令需要更长的处理时间,因为它们需要对 索引进行更新请按照下列标准选择建立索引的列。 该列用于频繁搜索 该列用于对数据进行排序请不要使用下面的列创建索引: 列中仅包含几个不同的值。 表中仅包含几行。为小型表创建索引可能不太划算, 因为SQL Server在索引中搜索数据所花的时间比在表 中逐行搜索所花的时间更长 建立索引有助于快速检索数据。索引分为唯一索引 、主键索引、聚集索引、非聚集索引 是一种特殊类型的存储过程,基于某个表或视图(触发表 、触发视图)的一个或多个列创建,用于监控它们的 insert、update、delete操作(触发操作),当发生 以上操作时自动执行事先定义的步骤,可进行复杂的 数据完整性监测和约束不能直接调用,只有在对触发器表的数据进行更改时 ,才自动执行不能传递和接受参数触发器可以实施更为复杂的数据完整性约束q 触发器触发时: q系统自动在内存中创建deleted表或inserted表 q只读,不允许修改;触发器执行完成后,自动删除 q inserted 表 q临时保存了插入或更新后的记录行 q可以从inserted表中检查插入的数据是否满足业务需求 q 如果不满足,则向用户报告错误消息,并回滚插入操作 q deleted 表q临时保存了删除或更新前的记录行 q可以从deleted表中检查被删除的数据是否满足业务需求 q 如果不满足,则向用户报告错误消息,并回滚插入操作修改操作inserted表deleted表增加(INSERT)记录 存放新增的记录-删除(DELETE)记 录-存放被删除的记录修改(UPDATE)记 录存放更新后的记录存放更新前的记录inserted表和deleted表存放的信息q创建触发器的语法:CREATE TRIGGER trigger_nameON table_nameWITH ENCRYPTIONFOR DELETE, INSERT, UPDATEAS T-SQL语句 GOWITH ENCRYPTION表示加密触发器定义的SQL文本DELETE, INSERT, UPDATE指定触发器的类型(1)使用SQL Server管理平台查看触发器信息。 在SQL Server管理平台中,展开服务器和数据库,选择并展开表,然后展开触发器选 项,右击需要查看的触发器名称,如图9-4所示,从弹出的快捷菜单中,选择“编写 触发器脚本为create到新查询编辑器窗口”,则可以看到触发器的源代码。 图9-4 查看触发器 (2)使用系统存储过程查看触发器。系统存储过程sp_help、sp_helptext和sp_depends分别提供 有关触发器的不同信息。其具体用途和语法形式如下。sp_help:用于查看触发器的一般信息,如触发器的名称、属 性、类型和创建时间。sp_help 触发器名称sp_helptext:用于查看触发器的正文信息。sp_helptext 触发器名称sp_depends:用于查看指定触发器所引用的表或者指定的表 涉及到的所有触发器。sp_depends 触发器名称sp_depends 表名 通过SQL Server管理平台、存储过程,可以修改触发器的正文和名称。 1使用SQL Server管理平台修改触发器正文。 在管理平台中,展开指定的表,右击要修改的触发器,从弹出的快捷菜单中选择“修改”选项 ,则会出现触发器修改窗口,如图9-5所示。在文本框中修改触发器的SQL语句,单击“语法 检查”按钮,可以检查语法是否正确,单击“执行”按钮,可以成功修改此触发器。 图9-5 触发器修改窗口 修改DML触发器的语法形式如下:ALTER TRIGGER schema_name.trigger_nameON (table|view) WITH ,.n(FOR|AFTER|INSTEAD OF)DELETE,INSERT,UPDATE NOT FOR REPLICATIONAS sql_statement;.n|EXTERNAL NAME ;:=ENCRYPTION|EXTERNAL NAME ;:=ENCRYPTION&lEXECUTE AS Clause :=assembly_name.class_name.method_name 例9-13 修改触发器。程序清单如下:CREATE TRIGGER s_reminderON SWITH ENCRYPTIONAFTER INSERT, UPDATE ASRAISERROR (不能对该表执行添加、更新操作, 16, 10)ROLLBACKGO - 下面修改触发器.ALTER TRIGGER s_reminderON SAFTER INSERTASRAISERROR (不能对该表执行添加操作, 16, 10)ROLLBACKGO 2使用sp_rename命令修改触发器的名称。sp_rename命令的语法形式如下:sp_rename oldname,newname 由于某种原因,需要从表中删除触发器或者需要使用新的触发器 ,这就必须首先删除旧的触发器。只有触发器所有者才有权删除触 发器。删除已创建的触发器有三种方法:(1)使用系统命令DROP TRIGGER删除指定的触发器。其语法形 式如下:DROP TRIGGER trigger ,.n (2)删除触发器所在的表。删除表时,SQL Server将会自动删除 与该表相关的触发器。(3)在SQL Server管理平台中,展开指定的服务器和数据库,选 择并展开指定的表,右击要删除的触发器,从弹出的快捷菜单中选 择“删除”选项,即可删除该触发器。 触发器是在对表进行插入、更新或删除操作时自动执行的 存储过程,触发器通常用于强制业务规则 触发器还是一个特殊的事务单元,当出现错误时,可以执 行ROLLBACK TRANSACTION回滚撤销操作 触发器一般都需要使用临时表:deleted表和inserted表 ,它们存放了被删除或插入的记录行副本 触发器类型: INSERT触发器 UPDATE触发器 DELETE触发器我们在项目开发中有一些常用的存储过程 大批量数据的插入 分页在项目的开发中,有时会碰到批量数据录入数据库 的情况,编写多条插入语句效率太低 Create procedure SplitString (string nvarchar(1000), - 要分隔的字符串splitchar nvarchar(10) = , - 分隔字符tablename nvarchar(50), - 存入的表名称fieldname nvarchar(50) = id - 存入的字段名称)as - 将字符串分隔开放进表中 declare l int - 第一个分隔字符的位置declare s int - 第二个分隔字符的位置set l = 0 set s = charindex(splitchar, string, l) while l PageLowerBound AND bbsTopic.TID=#TempTb.TIdORDER BY #TempTb.IndexID GO执行存储过程: EXEC procSplitPage CurPage=1,PageSize=2CREATE PROCEDURE dbo.P_GetBankstartIndex INT, - 第几页pageSize INT -页显示几条数据AS with orderlist as( select row_number() over(order by cardId) as rownumber, customerName,cardId,currentMoney from bank) select customerName,cardId,currentMoney from orderlist where rownumber between(startIndex-1)*pageSize+1 AND startIndex*pageSize
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号