视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。对视图的修改:单表视图一般用于查询和修改,会改变基本表的数据,多表视图一般用于查询,不会改变基本表的数据。
1) 定义和概念
① 从一个或几个基本表中根据用户需要而做成一个虚表
② 视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据
③ 视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户
2) 视图的优点
① 能分割数据,简化观点。可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作
② 为数据提供一定的逻辑独立性。 如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据
③ 提供自动的安全保护功能。 视图能像基本表一样授予或撤消访问许可权,给用户是表的一部分访问权限而不是全部。
④ 视图可以间接对表进行更新,因此视图的更新就是表的更新
3) 使用视图的一些限制和规则
① 视图必须唯一命名,不能和表或者其他视图重名
② 视图可以嵌套,可以从其他视图中构造视图
③ order by可以用在视图定义中,但是如果select语句从视图中检索数据时候,在视图中order by将被覆盖。
4) 视图和基本表的区别
a) 视图是已经编译好的sql语句。而表不是
b) 视图没有实际的物理记录。而表有。
c) 表是内容,视图是窗口
d) 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
e) 表是内模式,视图是外模式
f) 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
g) 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
h) 视图的建立和删除只影响视图本身,不影响对应的基本表。
5) 视图的创建、删除、使用、查看:
CREATE or replace view VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
DROP VIEW view_name |
select * from view当成表使用就好 |
由于视图相关与一张虚表,使用show tables查看当前数据中的视图: |
6) 通过视图变更数据
INSERT INTO v_order(pid,pname,price) VALUES('p010','柴油','34');
跨表插入数据系统反馈报错,提示不能修改超过一个表的数据。因此,可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。
补充考点:创建视图的时候的 with check 语句
对视图进行update或者insert操作时,保证更新或者插入的行满足图中定义的谓词条件。例如:一张表里有个字段是专业的;你创建视图的时候 create view stu as select 学生 from table where 专业='计算机' with check option 这样where后面就实现了对专业的限定 以后你如果对视图添加记录的时候专业如果不是计算机的话不让添加进去的。
Access的数据表视图中,可以修改字段名称、删除字段和删除记录,但是不能够修改字段类型。字段的类型需要在设计视图中修改。