讲义10:视图

来源:互联网 发布:智能变送器掌上编程器 编辑:程序博客网 时间:2024/06/05 11:09
--上课内容:第六章 视图及索引——视图-- 6.1 视图的创建和使用 -- 6.1.1 视图的概念:从一个或多个数据表或视图派生出来的虚表  -- 特点:   -- 1. 视图存储了要执行检索的查询语句的定义,并不存储数据   -- 2. 可以通过视图来查询、新增、修改、删除基表中的数据,但对数据要满足一定的条件    -- 3. 通过视图修改数据后,相应基表会发生变化;同时,基表变化时,会自动反映在视图中  -- 功能:   -- 1. 屏蔽数据复杂性(简化用户对数据库的操作;降低应用程序对底层表的依赖性,为数据库重构提供一定的逻辑独立性)   -- 2. 简化权限管理(按需求重新划分数据,让不同的用户以不同的方式看到不同或者相同的数据集)  -- 创建视图的原则:   -- 1. 视图名称必须遵循标识符的规则,且对每个用户必须为唯一。此外,该名称不得与该用户拥有的任何表的名称相同。   -- 2. 可以在其它视图和引用视图的过程之上建立视图,允许嵌套多达 32 级视图。   -- 3. 不能将规则或 DEFAULT 定义与视图相关联。   -- 4. 定义视图的查询不可以包含 ORDER BY、COMPUTE 或 COMPUTE BY 子句或 INTO 关键字。  -- 使用视图的原则:   -- 1. 修改视图中的数据时每次修改都只能影响一个基表   -- 2. 不能修改那些通过计算得到的字段   -- 3. 如果在创建视图时指定了WITH CHECK OPTION选项,那么所有使用视图修改数据库信息时,必须保证修改后的数据满足视图定义的范围   -- 4. 执行UPDATE、DELETE命令时,所删除与更新的数据必须包含在视图的结果集中   -- 5. 如果视图引用多个表时,无法用DELETE命令删除数据,若使用UPDATE命令则应与INSERT操作一样,被更新的列必须属于同一个表 -- 6.1.2 在查询分析器里用Transact SQL语句 创建视图  -- 6.1.2.1 语法:CREATE VIEW 视图名 [with encryption] AS 查询语句 [with check option]    create table gamer(g_id int,g_name varchar(10),g_gender char(2),g_jf int)    insert into gamer values(1,'aaa1','男',200)    insert into gamer values(2,'aaa2','男',800)    insert into gamer values(3,'aaa3','男',2000)    insert into gamer values(4,'aaa4','男',1200)    insert into gamer values(5,'aaa5','男',5600)    insert into gamer values(6,'aaa6','女',8700)    insert into gamer values(7,'aaa7','女',1000)    select * from gamer   -- 例: 创建一个视图显示所有游戏者的信息    create view v_g as select * from gamer  -- 注意:   -- 在一个数据库中不能创建同名的视图    create view v_g as select * from gamer   -- 创建同名的视图将会报错   -- 在创建视图时,select 子句 不能有order by,compute,into子句    create view v_g as select * from gamer order by g_jf  -- 创建带order by 的视图将会报错  -- 6.1.2.2 查看视图内容   select * from v_g  -- 6.1.2.3 查看视图相关信息   sp_help v_g       -- 查看视图信息   sp_helptext v_g   -- 查看视图定义   sp_depends v_g    -- 查看视图相关性   -- 当我们只想让指定人查看视图内容而不让看到视图是如何定义时   -- 要使用 with encription   create view v_g1 with encryption as select * from gamer   select * from v_g1   sp_helptext v_g1  -- 6.1.2.4 基表与视图相互作用   -- 对视图内容进行修改,查看数据表的变化   insert into v_g1 values(8,'aaa8','男',4500)   select * from v_g1   select * from gamer  -- 说明对视图的修改会修改基表内容   -- 对数据表进行修改,查看视图的变化   update gamer set g_jf=1200 where g_id=1   select * from gamer   select * from v_g1    -- 说明对表的修改会动态的显示在视图上  -- 6.1.2.5 强制执行数据检查   create view v_g2 as select * from gamer where g_jf>1900   select * from v_g2   select * from gamer      insert into v_g2 values(9,'aaa9','女',1800)   --不符合条件的记录也插入到gamer表里了   -- 当我们在数据操作时要做条件检查   -- 要使用 with check option   create view v_g3 as select * from gamer where g_jf>1900 with check option   insert into v_g3 values(10,'aaa10','女',1800)       --不符合条件的记录就出错了   select * from v_g3   select * from gamer    -- 对视图的修改可以是insert 也可以是update   create view v_g4 as select g_id,g_jf,g_jf*1.1 as 优惠 from gamer   update v_g4 set g_jf=400 where g_id=1  -- 查看视图及基表数据的变化   select * from v_g4   select * from gamer  -- 对视图的修改还可以delete   delete from v_g4 where g_id=1  -- 查看视图及基表数据的变化   select * from v_g4   select * from gamer -- 注意:  -- 不能修改计算出来的字段   update v_g4 set 优惠=400 where g_id=1 -- 报错  -- 如果视图引用多个表时,无法用UPDATE, DELETE命令删除数据   CREATE VIEW V_E AS SELECT S.T_NUMBER,S.T_NAME,E.T_GRADE   FROM STU_INFO AS S,EXAM AS E WHERE S.T_NUMBER=E.T_NUMBER   DELETE FROM V_E WHERE T_NUMBER='20040301'  --提示:视图或函数 'V_E' 不可更新,因为修改会影响多个基表 -- 6.1.2 修改视图  -- 语法:ALTER VIEW 视图名 [with encryption] AS 查询语句 [with check option]   -- 例:修改视图v_g1,使积分>1900   alter  view v_g1 as select * from gamer where g_jf>1900   select * from v_g1   sp_helptext v_g1  -- 说明如果修改视图时不加with encryption,就默认没有了   alter  view v_g1 with encryption as select * from gamer where g_jf>1900   -- 同样   alter  view v_g3 as select * from gamer where g_jf>2000   select * from v_g3   insert into v_g3 values(11,'aaa11','女',1800)   select * from gamer -- 说明如果修改视图时不加with check option,就默认没有了     alter  view v_g3 as select * from gamer where g_jf>2000 with check option   insert into v_g3 values(12,'aaa12','女',1800) -- 6.1.3 重命名视图 sp_rename v_g4,v_g5 select * from v_g5 -- 6.1.4 删除视图 drop view v_g5 select * from v_g5-- 复习: -- 创建视图基本语法:  CREATE VIEW 视图名 [with encryption] AS 查询语句 [with check option]   -- 如果有[with encryption] 其他人就看不到视图的定义   -- 如果有[with check option] 对视图进行更新操作时做条件检查   -- 定义视图的查询不可以包含 ORDER BY、COMPUTE 或 COMPUTE BY 子句或 INTO 关键字   -- 不能将规则或 DEFAULT 定义与视图相关联   -- 允许嵌套多达 32 级视图 -- 修改视图基本语法:  ALTER VIEW 视图名 [with encryption] AS 查询语句 [with check option]   -- 如果有[with encryption] 其他人就看不到视图的定义   -- 如果有[with check option] 对视图进行更新操作时做条件检查 -- 使用视图对数据进行操作:   -- 如果有[with check option],数据操作时作条件检查   -- 修改视图中的数据时每次修改都只能影响一个基表   -- 不能修改那些通过计算得到的字段c   -- 如果视图引用多个表时,无法用UPDATE, DELETE命令删除数据
0 0