使用SQL语句创建视图3.ppt_第1页
使用SQL语句创建视图3.ppt_第2页
使用SQL语句创建视图3.ppt_第3页
使用SQL语句创建视图3.ppt_第4页
使用SQL语句创建视图3.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 7 章 实 现 视 图,视图简介 创建视图 修改、查看、删除和重命名视图 通过视图修改数据 使用视图优化性能 实验,视图简介,提问: 如果经常需要从多个表中获取特定列的数据,并需要将这些数据组织在一起使用,有没有什么好办法让我能够进行这项工作。,场景: 你建立了一个数据库,其中存储了大量的公司客户的联系人信息。公司的华东团队希望能够方便的查询上海方面的联系人信息,以便他们关注上海的市场情况。 你查看了存储有关联系人的表,发现表中有一列为“城市”,并且不允许该列为“NULL”,由于这个信息将持续的提供给华东团队。 这时你会作出什么样的决定呢? 你决定根据该表建立视图,同时通过“城市”列让视图只显示表中的一部分信息。,视图简介,视图是个虚表,是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。,使用视图的优点和作用主要有: (1)视图可以使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示。 (2)视图大大地简化了用户对数据的操作。 (3)视图可以让不同的用户以不同的方式看到不同或者相同的数据集。 (4)在某些情况下,由于表中数据量太大,因此在表的设计时常将表进行水平或者垂直分割,但表的结构的变化对应用程序产生不良的影响。 而使用视图可以重新组织数据,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。 (5)视图提供了一个简单而有效的安全机制。,视图简介 创建视图 修改、查看、删除和重命名视图 通过视图修改数据 使用视图优化性能 实验,用 SQL SERVER 管理平台创建视图; 用 Transact-SQL 语句中的 CREATE VIEW 命令创建视图; 用 SQL SERVER 管理平台的视图模板来创建视图。,创建视图时应该注意以下情况: 你必须是sysadmin、db_owner、db_ddladmin角色的成员,或拥有创建视图权限,以及对要在其中创建视图的架构的 ALTER SCHEMA 权限。 只能在当前数据库中创建视图,在视图中最多只能引用1024列,视图中记录的数目限制只由其基表中的记录数决定。 如果视图引用的基表或者视图被删除,则该视图不能再被使用,直到创建新的基表或者视图。 如果视图中某一列是函数、数学表达式、常量或者来自多个表的列名相同,则必须为列定义名称。 不能在规则、默认、触发器的定义中引用视图。,SQL Server 2005提供了如下几种创建视图的方法:,当通过视图查询数据时,SQL Server要检查以确保语句中涉及的所有数据库对象存在,每个数据库对象在语句的上下文中有效,而且数据修改语句不能违反数据完整性规则。 视图的名称必须遵循标识符的规则,且对每个用户必须是惟一的。此外,该名称不得与该用户拥有的任何表的名称相同。,利用 SQL SERVER 管理平台创建视图:,在SQL SERVER管理平台中,展开指定的服务器,打开要创建视图的数据库文件夹,展开指定的【数据库】,右击该数据库中【视图】图标,从弹出的快捷菜单中依次选择【新建视图】选项,如图所示。,打开【添加表】对话框。如图所示。,选择将要定义的视图所需的表、视图、函数后,通过单击字段左边的复选框选择需要的字段,如图所示。,单击工具栏中的【保存】按钮,或者单击鼠标右键,从快捷菜单中选择保存选项保存视图,输入视图名,即可完成视图的创建。,利用Transact-SQL语句中的CREATE VIEW命令创建视图 :,其语法形式如下:,CREATE VIEW schema_name. view_name (column , ,n ) WITH ENCRYPTION SCHEMABINDING VIEW_METADATA AS select_statement ; WITH CHECK OPTION ,注意: 应制定统一的命名约定以将视图与表进行区分。例如:可将字母V或VIEW作为前缀添加到你所创建的每个视图的名称中。,举例:选择表s和sc中的部分字段和记录来创建一个视图,并且限制表s中的记录只能是计算机系的记录集合,视图定义为view_s。 程序清单如下: CREATE VIEW view_s AS SELECT ,s.age,s.sex,o,sc.score FROM s,sc WHERE s.sno=sc.sno AND s.dept=计算机; 举例:创建一个视图,使之包含复杂的查询。 程序清单如下: CREATE VIEW v_ExampleView WITH SCHEMABINDING AS SELECT sno, SUM(score) AS Sumscore, COUNT(*) AS CountCol FROM sc GROUP BY sno;,利用模板创建视图 :,在SQL SERVER 管理平台中,选择VIEW菜单中的【模板资源管理器 】选项,如下图所示。,在出现的【模板资源管理器】选项中选择【创建视图】选项,如上图所示。,按照提示输入视图名称,select语句后,执行此语句,即可创建视图。,所有权链对视图的影响 :,访问视图,从属,从属,用户: John,1,视图所有者: Mary,2,表所有者: Tim,4,视图所有者: Mary,3,所有权链接允许你通过设置对一个对象(如:视图)的权限而管理对多个对象(多个表)的访问。在允许跳过权限检查的情形下,所有权链接还带来了性能上的优势。 为了避免中断所有权链接,应确保所有视图和底层表和函数具有相同的所有者。,视图简介 创建视图 修改、查看、删除和重命名视图 通过视图修改数据 使用视图优化性能 实验,修改视图 :,在SQL SERVER管理平台中,右击要修改的视图,从弹出的快捷菜单中选择【设计视图】选项,出现【视图修改】对话框。该对话框与创建视图时的对话框相同,可以按照创建视图的方法修改视图。,使用 Transact-SQL 语句修改视图:,使用可视化数据库工具修改视图:,首先必须拥有使用视图的权限,然后才能使用 ALTER VIEW 语句,该语句的语法形式如下:,ALTER VIEW schema_name.view_name (column , ,n ) WITH ENCRYPTION SCHEMABINDING VIEW_METADATA AS select_statement ; WITH CHECK OPTION ,举例:修改了视图 V_employees,在该视图中增加了新的字段employees.salary ,并且定义一个新的字段名称 e_salary。,程序清单如下: ALTER VIEW dbo. V_employees(number,name,age,e_salary) AS SELECT number,name,age,salary FROM employees;,重命名视图 :,使用可视化数据库工具重命名视图:,在SQL SERVER管理平台中,选择要修改名称的视图,并右单击该视图,从弹出的快捷菜单中选择【重命名】选项;或者在视图上再次单击,也可以修改视图的名称。接着该视图的名称变成可输入状态,可以直接输入新的视图名称。,使用系统存储过程 sp_rename 重命名视图:,该过程的语法形式为: sp_rename old_name,new_name,举例:把视图 v_all 重命名为 v_part。 程序清单如下: sp_rename v_all,v_part,查看视图信息 :,使用可视化数据库工具查看视图:,在SQL SERVER管理平台中,右击某个视图的名称,从弹出的快捷菜单中选择【打开视图】选项,在SQL SERVER管理平台中就会显示该视图的输出数据,如图所示。,使用系统存储过程 查看视图:,可以使用系统存储过程sp_help显示视图特征,使用sp_helptext显示视图在系统表中的定义,使用sp_depends显示该视图所依赖的对象。(使用SQL Server 查询分析器可以方便地显示视图属性信息,如左边图所示。右边图显示了使用sp_helptext存储过程显示视图的创建语句。),删除视图 :,对于不再使用的视图,可以使用 SQL SERVER 管理平台或者Transact-SQL语句中的DROP VIEW命令删除它。,使用Transact-SQL语句DROP VIEW删除视图,其语法形式如下:,DROP VIEW schema_name . view_name , n ,可以使用该命令同时删除多个视图,只需在要删除的各视图名称之间用逗号隔开即可。 举例:同时删除视图 v_student 和 v_teacher。 程序清单如下: DROP view v_student,v_teacher,注意: 删除视图与重建和修改视图是不一样的。,视图加密 :,要保护定义视图的逻辑,可在CREATE VIEW或ALTER VIEW语句中指定WITH EMCRYPTION选项。 该定义文本加密存储于sys.syscomments系统表中,因此无法读取。,提示: 创建加密视图之前,应在某个安全位置存储 CREATE VIEW 或 ALTER VIEW 语句的副本;否则,若以后需要该视图的定义,则无法访问到该定义。,举例: -修改HumanResource.vEmployee视图,并启用加密, -通过 HumanResource . vEmployee 和 Person . Contact 表的内连接, -获取员工相关信息。,ALTER VIEW HumanResource . vEmployee WITH ENCRYPTION AS SELECT e.EmployeeID ,c.Title.c.FirstName,c.MiddleName, c.LsstName, c.Suffix, e.Title AS JobTitle, c.Phone, c.EmailAddress FROM HumanResource . vEmployee e INNER JOIN Person . Contact c ON c.ContactID=e.ContactID,程序清单如下:,视图简介 创建视图 修改、查看、删除和重命名视图 通过视图修改数据 使用视图优化性能 实验,使用视图修改数据时,需要注意以下几点:,修改视图中的数据时,不能同时修改两个或者多个基表,可以对基于两个或多个基表或者视图的视图进行修改,但是每次修改都只能影响一个基表。 不能修改那些通过计算得到的字段。例如包含计算值或者合计函数的字段。 如果在创建视图时指定了 WITH CHECK OPTION 选项,那么使用视图修改数据库信息时,必须保证修改后的数据满足视图定义的范围。 执行 UPDATE、DELETE 命令时,所删除与更新的数据必须包含在视图的结果集中。 如果视图引用多个表时,无法用 DELETE 命令删除数据,若使用UPDATE 命令则应与 INSERT 操作一样,被更新的列必须属于同一个表。,举例:创建一个基于表 employees 的新视图 v_employees。 程序清单如下: CREATE VIEW v_employees(number, name, age, sex, salary) AS SELECT number, name, age, sex, salary FROM employees 执行以下语句可向表 employees 中添加一条新的数据记录: INSERT INTO v_employees Values(001,李力,22,m,2000);,举例:首先创建一个包含限制条件的视图v_employee2,限制条件为工资2000,然后插入了一条不满足限制条件的记录(002 ,王则,30,f,1000),再用SELECT语句检索视图和表。 程序清单如下: CREATE VIEW v_employee2 AS SELECT * FROM employee WHERE 工资2000 GO INSERT INTO v_employee2 VALUES(002,王则,30,f,1000) GO SELECT * FROM employee GO SELECT * FROM v_employee2 GO,举例 在上一个例子的基础上创建视图v_employee3,并添加WITH CHECK OPTION选项。 程序清单如下: CREATE VIEW v_employee3 AS SELECT * FROM employee WHERE 工资2000 WITH CHECK OPTION GO INSERT INTO v_employee3 VALUES(002,王则,30,f,1000) GO SELECT * FROM employee GO SELECT * FROM v_employee3 GO,运行该程序将显示如下出错信息: Server: Msg 550, Level 16, State 1, Line 1 The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint. The statement has been terminated.,使用视图可以更新数据记录,但应该注意的是,更新的只是数据库中的基表。 使用视图删除记录,可以删除任何基表中的记录,直接利用DELETE 语句删除记录即可。但应该注意,必须指定在视图中定义过的字段来删除记录。 举例:创建了一个基于表 employees 的视图 v_employees ,然后通过该视图修改表 employees 中的记录。 程序清单如下: CREATE VIEW v_employees AS SELECT * FROM employees UPDATE v_employees SET name=张然 WHERE name=张三; 举例:利用视图v_employees删除表employees中姓名为张然的记录。 程序清单如下: DELETE FROM v_employees WHERE name=张然 ;,视图简介 创建视图 修改、查看、删除和重命名视图 通过视图修改数据 使用视图优化性能 实验,视图的性能注意事项 :,视图将导致性能开销,因为视图是动态生成的 嵌套视图存在性能上的风险 评估非加密嵌套视图的定义 使用“SQL Server Profiler”评估性能 索引视图和分区视图能够提高性能,索引视图:,场景: 你为销售部门创建一个数据库,用于存储售出的产品信息。销售部经理需要你将售出的产品中有打折信息的产品信息单独提供给销售部,这些信息每周处理一次。你查看产品表,发现其中一列信息用来显示打折,因此你为销售部门单独建立视图以供他们查询。 一段时间后,销售部门反映查询速度慢,发现其中存有大量数据,你为其建立索引,将其转换为索引视图。经测试,查询性能得到显著提高。,唯一聚集索引的视图 具体化视图。对基本表中数据进行修改时,存储于索引视图的数据也相应发生变化。缩短了检索时间,提高了查询性能; 在查询解决方案中,若某一查询的FROM字句未直接指定视图,允许使用查询优化器使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论