`

数据库基础知识 二:索引 视图 存储过程 触发器 用户定义函数

阅读更多
三  索引
在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是一个表中所包含的值的列表,其中注明了表中包含各个值的行所在的存储位置。
设计索引要考虑的准则包括:
• 一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。另一方面,对于不需要修改数据的查询(SELECT 语句),大量索引有助于提高性能。
覆盖的查询可以提高性能。覆盖的查询是指查询中所有指定的列都包含在同一个索引中。例如,如果在一个表的 a、b 和 c 列上创建了组合索引,则从该表中检索 a 和 b 列的查询被视为覆盖的查询。创建覆盖一个查询的索引可以提高性能,因为该查询的所有数据都包含在索引自身当中;检索数据时只需引用表的索引页,不必引用数据页,因而减少了 I/O 总量。
对小型表进行索引可能不会产生优化效果,因为 SQL Server 在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。
• 可以在视图上指定索引
• 可以在计算列上指定索引

使用聚集索引: 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引)。
使用非聚集索引: 非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
使用唯一索引: 唯一索引可以确保索引列不包含重复的值。
CREATE NONCLUSTERED INDEX DescIdx ON
         ObjTable(ObjName ASC, ObjWeight DESC)


四 视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。
创建索引视图:若经常在查询中引用这类视图,可通过在视图上创建唯一聚集索引来提高性能。在视图上创建唯一聚集索引时将执行该视图,并且结果集在数据库中的存储方式与带聚集索引的表的存储方式相同。
创建分区视图:分区视图在一个或多个服务器间水平连接一组成员表中的分区数据,使数据看起来就象来自一个表。
创建分布式分区视图,首先应当:为 Server2 添加一个名为 Server2 的、带有连接信息的链接服务器定义,并添加一个名为 Server3 的链接服务器定义以访问 Server3。然后在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。
CREATE VIEW Customers AS
   SELECT * FROM 服务器1.数据库名.表的拥有者.表名(Customers_33)
UNION ALL
   SELECT * FROM Server2.CompanyDatabase.TableOwner.Customers_66
UNION ALL
   SELECT * FROM Server3.CompanyDatabase.TableOwner.Customers_99


五 存储过程
Transact-SQL 编程语言是应用程序和 SQL Server 数据库之间的主要编程接口。使用 Transact-SQL 程序时,可用两种方法存储和执行程序:可以在本地存储Transact-SQL程序,并创建向 SQL Server 发送命令并处理结果的应用程序;也可以将Transact-SQL程序在 SQL Server 中存储为存储过程,并创建执行存储过程并处理结果的应用程序。
可使用 Transact-SQL EXECUTE 语句运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接用在表达式中。
创建存储过程时,应指定:
1.指定参数:所有输入参数和向调用过程或批处理返回的输出参数。
2.设计存储过程执行数据库操作(包括调用其它过程)的编程语句。
3.从存储过程中返回数据:返回结果集或返回至调用过程或批处理以表明成功或失败(以及失败原因)的状态值
CREATE PROC showind3 @table varchar(30) = NULL
AS IF @table IS NULL
   PRINT 'Give a table name'
ELSE
   SELECT TABLE_NAME = sysobjects.name,
   INDEX_NAME = sysindexes.name, INDEX_ID = indid
   FROM sysindexes INNER JOIN sysobjects
   ON sysobjects.id = sysindexes.id
   WHERE sysobjects.name = @table

六 用触发器强制执行业务规则
SQL Server提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。
触发器可以支持约束的所有功能,在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。
   设计触发器:
• 执行 INSTEAD OF 触发器代替通常的触发动作。INSTEAD OF 触发器还可在带有一个或多个基表的视图上定义,而在这些视图上这些触发器可扩展视图可支持的更新类型。
• 在执行了 INSERT、UPDATE 或 DELETE 语句操作之后执行 AFTER 触发器。AFTER 触发器只能在表上指定。
创建触发器时需指定:
• 名称。
• 在其上定义触发器的表。
• 触发器将何时激发。
• 激活触发器的数据修改语句。有效选项为 INSERT、UPDATE 或 DELETE。多个数据修改语句可激活同一个触发器。例如,触发器可由 INSERT 或 UPDATE 语句激活。
• 执行触发操作的编程语句。
CREATE TABLE my_table*
(a int NULL, b int NULL)
GO

CREATE TRIGGER my_trig
ON my_table
FOR INSERT
AS
IF UPDATE(b)
   PRINT 'Column b Modified'
GO

七   用户定义函数
函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。SQL Server并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。
CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
   (@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
    @CubeHeight decimal(4,1) )
RETURNS decimal(12,3) -- Cubic Centimeters.
AS
BEGIN
   RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END

然后可以在允许整型表达式的任何地方(如表的计算列中)使用该函数:
CREATE TABLE Bricks
   (
    BrickPartNmbr   int PRIMARY KEY,
    BrickColor      nchar(20),
    BrickHeight     decimal(4,1),
    BrickLength     decimal(4,1),
    BrickWidth      decimal(4,1),
    BrickVolume AS
              (
               dbo.CubicVolume(BrickHeight,BrickLength, BrickWidth)
              )
   )
分享到:
评论

相关推荐

    SQL Server 数据库基础、数据管理、数据查询、事务索引视图、存储过程及触发器、高级编程

    SQL Server 数据库基础.pdf,SQL Server 数据管理(常用函数).pdf,SQL Server 数据查询(表的关联).pdf,SQL Server 事务索引视图.pdf,SQL Server 存储过程及触发器.pdf,SQL Server 编程及高级查询.pdf,让你从入门...

    SQL Server创建存储过程、触发器、函数等(学习札记)

    SQL的存储过程、触发器等建立视图存储过程触发器函数(自定义函数)索引 视图  视图是从一个或几个基本表(或视图)导出的表。不同的是,它是一虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据...

    SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则

    SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则

    mysql高级部分--包含索引建立优化_函数_存储过程_触发器_及游标

    mysql高级部分--包含索引建立优化_函数_存储过程_触发器_及游标

    数据库系统原理总结.pdf

    ⽤来查询多个表 存储过程:通过创建存储过程,可以执⾏多条SQL语句 触发器:是⼀种特殊的存储过程,并发性 关于这些基础知识的理解,我画了张图,请⼤家指正: 总结:数据库管理系统是对数据进⾏管理的,学⽣信息...

    Oracle从基础到熟练(太实用了)

    ①:存储过程 ②:函数 ③:自主事务处理 ④:包规范|包主体 十一.触发器|内置包 ①:触发器类型 ②:触发器原理 ③:new和old 两个行类型变量 ④:递归 ⑤:内置包 十二.导入导出 ①:导入导出/整个DB/表空间/表/...

    神通数据库-数据库快速入门.pdf

    在神通数据库系统中,触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效 被触发执行。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并 9 可以包含复杂的 ...

    Mysql数据库基础知识

    涵盖了MySQL数据库的基本概念、体系结构、数据类型、SQL语言基础、索引优化、存储过程与函数、触发器、视图、事务管理、安全性以及备份与恢复等重要知识点。它旨在为学习者提供一个全面而精炼的MySQL学习指南。适用...

    工厂数据库管理系统.doc

    确定所有字段的名称、类型、宽度、小数位数及完整性约束 确定数据库及表的名称及其组成 确定索引文件和索引关键字 5、数据库安全及维护设计阶段 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图) 为了...

    两个数据库比较(SQLServer版)

    * 用途:比较数据库内对象(表、视图、函数、存储过程、触发器、约束等)、字段(数据类型及长度) * 假设:库CNFM1与CFR1是一个项目不同时期的版本数据库,由于整合的需要,那么下面的功能可能有用 * 使用:将CNFM1...

    SqlServer数据库课程设计-订单管理

    创建了计算费用、将单号集分隔得到单号数量的函数,模糊查询订单的存储过程,还有视图、索引及触发器。 具体要求如下: 1.至少3张表 2.要定义表约束(例如主码、外码、非空等) 3.每张表至少插入10条记录 4.至少定义...

    sql数据库学习全过程笔记

    6.12 Sql(基础) 1 6.15 sql(数据库完整性) 2 6.20 sql(索引) 3 6.21 sql(软件项目流程) 3 ...7.9存储过程、游标、触发器 27 7.11 函数 32 7.12数据库管理备份与恢复,数据导入与导出 35 7.13数据库的权限设置 35

    数据库设计参考模板.doc

    表及索引数据量的估算及物理存储参数的设置 索引的设计 存储过程的设计 视图描述 用约束和触发器来强制执行业务规则 四、运用设计 4.1数据字典设计 4.2安全保密设计 ----------------------- 数据库设计参考模板全文...

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    11.11.4 使用存储过程、用户定义函数和视图来管理应用程序安全 11.11.5 使用一个代理用户来管理应用程序安全 11.11.6 使用应用程序角色来管理应用程序安全 11.12 小结 11.13 练习 第12章 SQL Server 2000中的XML支持...

    SqlServer数据库课程设计-车辆运费管理

    这是使用Microsoft Sql Server数据库实现的车辆运费管理...创建了计算总价、根据磅单号计算差异之和的函数,创建了根据驾驶员查询的存储过程,创建了两个联合查询的视图,创建了三张表的索引,创建了更新操作的触发器。

    Oracle数据库实验操作

    实验41:编写存储过程 83 实验42:编写包package 85 第三部分数据库的体系结构 88 实例的维护 88 实验43:数据库的最高帐号sys的操作系统认证模式 90 实验44:数据库的最高帐号sys的密码文件认证模式 92 实验45:...

    数据库oracle教案.rar

    oracle基础教案包括:数据库基本知识、数据库安装与配置、数据查询语言、多表查询、数据库函数、数据库操纵语言、数据库控制语言、数据库定义语言、数据库事务、视图、序列、索引、触发器、游标、函数、存储过程、...

    SQLServer2000高级编程技术(part02)-想学存储过程 SQL编程 务必要看

    11.11.4 使用存储过程、用户定义函数和视图来管理应用程序安全 11.11.5 使用一个代理用户来管理应用程序安全 11.11.6 使用应用程序角色来管理应用程序安全 11.12 小结 11.13 练习 第12章 SQL Server 2000中的XML支持...

Global site tag (gtag.js) - Google Analytics