日期:2014-05-16  浏览次数:20636 次

视图和索引

视图:

视图是从一个或者几个基本表(或视图)导出的表。与基本表不同的是它是一个虚表。真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在,数据库中只存放视图的定义。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。所以,基本表的数据发生变化,相应的视图的数据也会变化。

视图一经定义,就可以像基本表一样被查询,删除,但对视图的修改会有一定限制。


视图作用:

1、简单性---使用户关注于需要的数据上,通过视图可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件,用户只需对一个虚表进行简单查询即可,无需关心数据怎么来的。

2、安全性---对应不同用户定义不同视图,使保密数据不出现在不应该出现的用户面前(根据权限)。

3、逻辑性---图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

  ①如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

  ② 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

  ③如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

  ④ 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

视图的各种使用:

CREATE VIEW <视图名>【(列名组)】AS <子查询>

DROP VIEW <视图名>
子查询可以是任意复杂的select语句,但通常不允许有order 不用子句和distinct短语。
with check opinion表示对视图进行update、insert、delete操作要保证更新、插入、删除满足视图定义中的谓语条件,就是子查询中的条件表达式。
使用WITH CHECK OPTION子句问题提出:若创建视图ygb_view,其程序清单如下:CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’执行下列语句,插入新记录:INSERT INTO ygb_view(姓名,性别,工资)values(‘李立三’,‘男’,2300)插入操作成功,但不合理!解决办法:使用with check option,程序清单如下:CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’With check option
 同样,插入新记录:INSERT INTO ygb_view(姓名,性别,工资) values(‘李立三’,‘男’,2300)插入操作