一. 视图概述
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据
既然视图的定义是基于基本表的,哪为什么还要定义视图呢?这是因为合理地使用视图能够带来许多好处:
1、 视图能简化用户操作
视图机制使用户可以将注意力集中在所关心地数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的的数据查询操作。例如,那些定义了若干张表连接的视图,就将表与表之间的连接操作对用户隐藏起来了。换句话说,用户所作的只是对一个虚表的简单查询,而这个虚表是怎样得来的,用户无需了解。
如、创建一个部门为20的所有的员工:
create view Dept_emp as select emp.* from dept,emp where emp.deptno=dept.deptno and emp.deptno=20;
在没有使用视图时 是通过SQL语句进行连接查询,现在使用视图,只需要一个SQL即可查询出来;
2、 视图使用户能以多种角度看待同一数据
视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常必要的。
-- 创建一个隐藏表字段的视图 create view emp_filed_hide as select ename,job,mgr,deptno from emp; -- 隐藏薪资字段,只对外暴露姓名,职位,部门号 alter view emp_filed_hide as select ename,job,deptno from emp;
3、 视图对重构数据库提供了一定程度的逻辑独立性
数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全的支持
4、可对视图进行crud的操作,同时操作的表的值也会发生变化
-- 更新视图,也更新表alter update emp_filed_hide set job='clerk1' where ename='smith'; select * from emp_filed_hide where ename='smith'; select * from emp where ename='smith';
总的来说:视图提供了一定的安全性、数据逻辑独立性