视图SQLServerppt课件.ppt

上传人:本田雅阁 文档编号:3191727 上传时间:2019-07-27 格式:PPT 页数:26 大小:296.51KB
返回 下载 相关 举报
视图SQLServerppt课件.ppt_第1页
第1页 / 共26页
视图SQLServerppt课件.ppt_第2页
第2页 / 共26页
视图SQLServerppt课件.ppt_第3页
第3页 / 共26页
视图SQLServerppt课件.ppt_第4页
第4页 / 共26页
视图SQLServerppt课件.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《视图SQLServerppt课件.ppt》由会员分享,可在线阅读,更多相关《视图SQLServerppt课件.ppt(26页珍藏版)》请在三一文库上搜索。

1、视图 杨之江 内容 w视图简介 w视图的优点 w创建视图 w管理视图 w通过视图管理数据 wQ&A 1 视图简介 w视图是个虚表,是从一个或者多个表或视 图中导出的表,其结构和数据是建立在对 表的查询基础上的。 w视图一经定义便存储在数据库中,与其相 对应的数据并没有像表那样又在数据库中 再存储一份,通过视图看到的数据只是存 放在基本表中的数据 w对视图的操作与对表的操作一样,可以对 其进行查询、修改(有一定的限制)、删 除 2 视图的优点 w视点集中:视图可以使用户只关心他感兴趣的某些特定数 据和他们所负责的特定任务,而那些不需要的或者无用的 数据则不在视图中显示。 w简化操作:视图大大地

2、简化了用户对数据的操作,视图本 身就是一个复杂查询的结果集这样在每一次执行相同的查 询时不必重新写这些复杂的查询语句,只要一条简单的查 询视图语句即可可见视图向用户隐藏了表与表之间的复杂 的连接操作 w定制数据:视图可以让不同的用户以不同的方式看到不同 或者相同的数据集。 w合并分割数据:在某些情况下,由于表中数据量太大,因 此在表的设计时常将表进行水平或者垂直分割,但表的结 构的变化对应用程序产生不良的影响。而使用视图可以重 新组织数据,从而使外模式保持不变,原有的应用程序仍 可以通过视图来重载数据。 w安全性:视图提供了一个简单而有效的安全机制。 3 创建视图 wSQL Server 20

3、00提供了如下几种创建视图的方法: w(1)用SQL SERVER企业管理器创建视图; w(2)用Transact-SQL语句中的CREATE VIEW命令创建视图; w 创建视图时应该注意以下情况: w1)只能在当前数据库中创建视图,在视图中最多只能引用1024列, 视图中记录的数目限制只由其基表中的记录数决定。 w2)如果视图引用的基表或者视图被删除,则该视图不能再被使用, 直到创建新的基表或者视图。 w3)如果视图中某一列是函数、数学表达式、常量或者来自多个表的 列名相同,则必须为列定义名称。 w4)不能在视图上创建索引,不能在规则、默认、触发器的定义中引 用视图。 w5)当通过视图查询

4、数据时,SQL Server要检查以确保语句中涉及的 所有数据库对象存在,每个数据库对象在语句的上下文中有效,而且 数据修改语句不能违反数据完整性规则。 w6)视图的名称必须遵循标识符的规则,且对每个用户必须是惟一的 。此外,该名称不得与该用户拥有的任何表的名称相同。 3.1 使用SQL SERVER Enterprise Manager 来创建视图 w启动SQL SERVER Enterprise Manager 登录到指定的 服务器 w打开要创建视图的数据库文件夹选中视图图标此时在右面 的窗格中显示当前数据库的所有视图,右击图标在弹出菜 单中选择New View 选项打开New View

5、对话框, 在 New View 对话框中共有四个区:表区、列区、SQL script 区、数据结果区 w在创建视图时首先点击 按钮,打开添加表对话框 w在列区中选择将包括在视图的数据列,此时相应的SQL SERVER 脚本便显示在SQL script 区 w单点 按钮,在数据结果区将显示包含在视图中的数据行 w单击 按钮在弹出对话框中输入视图名单击保存完成视图 的创建 3.2 Transact-SQL 命令创建视图 w使用Transact-SQL 命令CREATE VIEW 创建视图的语 法格式为: CREATE VIEW view_name ( column ,.n ) WITH ,.n A

6、S select_statement WITH CHECK OPTION := ENCRYPTION | SCHEMABINDING | VIEW_METADATA 参数含义 wcolumn ,.n ,视图列名 wselect_statement,构成视图文本的主体利用SELECT 命令从表中或视图中选择列构成新视图的列,但是在 SELECT 语句中,不能使用ORDER BY、COMPUTE、 COMPUTE BY语句,不能使用INTO关键字,不能使用 临时表 wWITH CHECK OPTION 保证在对视图执行数据修改后, 通过视图能够仍看到这些数据。比如创建视图时定义了 条件语句,很明显

7、视图结果集中只包括满足条件的数据 行,如果对某一行数据进行修改导致该行记录不满足这 一条件,但由于在创建视图时使用了WITH CHECH OPTION 选项,所以查询视图时结果集中仍包括该条记 录,同时修改无效 wENCRYPTION 加密 wSCHEMABINDING 表名视图名或函数名前必须有所有 者前缀 wVIEW_METADATA返回视图的元数据信息 创建视图 示例1 w使用WITH ENCRYPTION WITH CHECK OPTION 选项并且包含 函数列 wuse pubs wif exists (select table_name from information_schem

8、a.views wwhere table_name = emprange) wdrop view emprange wgo wcreate view emprange (emp_id, fname, lname, pubid, job_id, rows) wwith encryption was wselect emp_id, fname, lname, pub_id , job_id, rowcount wfrom employee wwhere job_id between 11 and 12 wwith check option wgo 创建视图 示例1 w由于使用了WITH CHECK

9、 OPTION 所以当对视图进行修 改时将返回错误信息 w比如执行以下语句 wupdate emprange wset job_id=5 wwhere emp_id=PCM98509F w返回错误信息为 wThe attempted insert or update failed because the target view either specifies WITH CHECK OPTION or wspans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation

10、did not wqualify under the CHECK OPTION constraint. wThe statement has been terminated. 创建视图 示例1 w由于使用了WITH ENCRYPTION 选项所以当执 行以下语句时会看到很多乱码 wuse pubs wgo wselect c.id, c.text wfrom syscomments c, sysobjects o wwhere c.id = o.id and o.name = emprange wgo 创建视图 示例2 w若表被垂直分割成多个子表使用视图重新装载 表的数据 wcreate vi

11、ew comptable was wselect * from table1 wunion wselect * from table2 wunion wselect * from table 3 创建视图 示例3 w显示包含内置函数的视图定义。使用函数时, 必须在 CREATE VIEW 语句中为派生列指定 列名 wCREATE VIEW categories (category, average_price) wAS wSELECT type, AVG(price) wFROM titles wGROUP BY type 创建视图 示例4 wROWCOUNT 函数作为视图定义的一 部分 wC

12、REATE VIEW myview w AS SELECT au_lname, au_fname, ROWCOUNT AS bar wFROM authors w WHERE state = UT 4 管理视图 w查看、修改视图 w使用存储过程检查视图 w删除视图 4.1 查看、修改视图 w通过企业管理器 w通过ALTER VIEW 4.2 使用存储过程检查视图 wsp_depends 视图名称 sp_depends emprange wsp_help 视图名称 wsp_helptext 视图名称 4.3 删除视图 w通过企业管理器 w通过查询分析器 w通过DROP VIEW 5 通过视图管理

13、数据 w插入数据记录 w更新和删除数据记录 w使用视图修改数据时,需要注意以下几点: w(1)修改视图中的数据时,不能同时修改两个或者多个 基表,可以对基于两个或多个基表或者视图的视图进行修 改,但是每次修改都只能影响一个基表。 w(2)不能修改那些通过计算得到的字段,例如包含计算 值或者合计函数的字段。 w(3)如果在创建视图时指定了WITH CHECK OPTION 选项,那么使用视图修改数据库信息时,必须保证修改后 的数据满足视图定义的范围。 w(4)执行UPDATE、DELETE命令时,所删除与更新的 数据必须包含在视图的结果集中。 w(5)如果视图引用多个表时,无法用DELETE命令

14、删除 数据,若使用UPDATE命令则应与INSERT操作一样,被 更新的列必须属于同一个表。 5.1 插入数据记录 w例 创建一个基于表employees的新视图 v_employees。 w程序清单如下: wcreate view v_employees(number, name, age, sex, salary) was wselect number, name, age, sex, salary wfrom employees wwhere name=张三 w执行以下语句可向表employees中添加一条新的数据 记录: wInsert into v_employees wValues

15、(001,李力,22,m,2000) 5.1 插入数据记录 w例首先创建一个包含限制条件的视图v_employee2,限制条件为工 资2000,然后插入了一条不满足限制条件的记录,再用SELECT语 句检索视图和表。 w程序清单如下: wcreate view v_employee2 was wselect * from employee wwhere salary2000 wgo winsert into v_employee2 wvalues(002,王则,30,f,1000) wgo wselect * from employee wgo wselect * from v_employe

16、e2 wgo 5.1 插入数据记录 wcreate view castate (au_id, au_lname, au_fname, phone, address, city, state, contract) was wselect au_id, au_lname, au_fname, phone, address, city, state, contract wfrom authors wwhere state = ca w执行以下语句向视图中插入一条数据记录 winsert into castate wvalues (234-34-4512, John, Smith, 415 548-7

17、723, 18 Broadway Av., San Jose, ca,1) w使用SELECT 语句可以在视图和表中查到该条记录,但是如果执行下面 的语句虽然仍可以成功执行,但只可以在表而不是视图中查到该条数据 winsert into castate wvalue (234-34-4512, John, Smith, 415 548-7723, 18 Broadway Av., Gary, IN,1) 5.1 插入数据记录 w在本例中所创建的视图引用了多个表 wcreate view au_title (author_au_id, au_lname, au_fname, contract,

18、title_au_id, title_id, au_ord , wroyaltyper) was wselect a.au_id, a.au_lname, a.au_fname, a.contract, t.au_id, t.title_id, t.au_ord , t.royaltyper wfrom authors a, titleauthor t wwhere a.au_id = t.au_id w若要执行INSERT 语句则在同一个语句只能对属于同一个表的列执行 操作所以若向视图au_title 中插入一行数据只能分别执行以下语句 winsert into au_title (auth

19、or_au_id, au_lname, au_fname, contract) wvalues (234-34-4611,John,Smith, 1) winsert into au_title (title_au_id, title_id, au_ord, royaltyper) wvalues (234-34-4611,BU1111,1,50) 5.2 更新和删除数据记录 w使用视图可以更新数据记录,但应该注意的是,更新的只是数据库中 的基表。使用视图删除记录,可以删除任何基表中的记录,直接利用 DELETE语句删除记录即可。但应该注意,必须指定在视图中定义过的 字段来删除记录。 w例:创建了一个基于表employees的视图v_employees,然后通过 该视图修改表employees中的记录。 wcreate view v_employees w as w select * from employees w update v_employees w set name=张然 w where name=张三 w例:利用视图v_employees删除表employees中姓名为张然的记录 wdelete from v_employees w where name=张然 Question & Answer wThank you

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1