现在的位置: 首页 > 综合 > 正文

视图

2017年12月12日 ⁄ 综合 ⁄ 共 1463字 ⁄ 字号 评论关闭

一、什么是视图

视图是从一个或几个基本表中根据用户的需要而做成的虚表。同真实的表一样,视图包含一系列带有名称的列和行数据。

视图只存储定义,而不存储实际的数据,视图在打开的瞬间通过定义从基表中搜集数据,并展现给用户。

视图与查询都是由sql语句组成,但是它们也有明显的区别:

1.存储上的区别,视图存储为数据库设计的一部分,而查询不是;

2.更新的限制不同;

3.通过sql语句可以对一个表进行排序,但是视图不行。

二、视图的优点

1.能分割数据,简化观点。可以通过SELECT和WHERE语句来定义视图,分割数据表中用户不关心的数据;

2.为数据提供一定的逻辑独立性。如果为某一个基表定义一个视图,即使以后基本表的内容发生改变了也不会影响“视图定义”所得到的数据;

3.提供自动的安全保护功能。视图可以像基本表一样授予或取消访问许可权;

4.视图可以间接更新数据表;

三、创建删除视图、通过视图更新源表数据

创建视图:

create [or replace] view [db_name.]view_name as select_statement [with [cascade|local] check option]

如果给定了or replace 那么当同名视图存在时将覆盖原视图,同时要对视图有删除权限。

如:create view purchase_detail as select product.name as name,product.price as price,purchase.qty as qty,product.price * purchase.qty as total_value from 

product,purchase where product.id = purchase.id;

select * from purchase_detail;

修改视图:

alter view view_name as select_statement;

使用update更新视图中的数据:

1.更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列

如有如下的视图:create view detail as select id,name,department_name from employee,department where employee.dept_id=department.dept_id;

update detail set id=\'001\',department_name=\'wenda\' where id=\'01\';//这个是错误的

update detail set id=\'001\' where id=\'01\'; update detail setdepartment_name=\'wenda\' where id=\'01\';//这个是正确的

2.不能在使用了distinct语句的视图中更新值;

3.不能再group by语句的视图中更新值;

4.当视图由两个以上基表构成时,不允许删除视图的数据;

5.如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况,这个时候要用with check option

如,create view detail as select * from employee where sex="male";

这个时候完全可以插入insert detail values(\'001\',\'female\'),为了防止这种情况的发生,可以使用with check option子句来对插入或更改的数据进行限制;

6.若视图的字段来自集函数,则此视图不允许更新;

【上篇】
【下篇】

抱歉!评论已关闭.