1 视图是什么?
首先,视图是虚拟的表,是不存在的。若使用jdbc连接它,是会报错的,它本质上是sql语句
其次,物理表是真实存在的表,占用内存空间。视图没有实际的物理记录。而表有。
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
如果操作视图中的数据,有的时候基表的数据也会被修改的。如果加了某些特定限制,则不会修改原表的数据,甚至不能修改视图。
作用
1.1 简化查询,如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询
1.2 视图本质上就是一条SELECT语句,所以当访问视图时,只能访问到所对应的SELECT语句中涉及到的列,对基表中的其它列起到安全和保密的作用,可以限制数据访问。
2 创建视图
对于视图emp_list_view_single而言,如果修改这个视图中的记录,那么基表的数据也随着修改
对于视图emp_list_view而言,是无法修改视图中的数据的。修改时会报错。但是如果修改基表数据,则这张视图的数据也会变化。
or replace 有同名的就替换掉
要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。
如果视图包含下述结构中的任何一种,那么它就是不可更新的:
(1)聚合函数;
(2)DISTINCT关键字;
(3)GROUP BY子句;
(4)ORDER BY子句;
(5)HAVING子句;
(6)UNION运算符;
(7)位于选择列表中的子查询;
(8)FROM子句中包含多个表;
(9)SELECT语句中引用了不可更新视图;
(10)WHERE子句中的子查询,引用FROM子句中的表;
(11)ALGORITHM 选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。
use test01; CREATE OR REPLACE VIEW emp_list_view AS SELECT e.deptno,e.ename,e.hiredate,e.sal,d.deptname from emp AS e ,dept AS d WHERE e.deptno =d.deptno;
use test01; CREATE OR REPLACE VIEW emp_list_view_single AS SELECT e.deptno,e.ename,e.hiredate,e.sal from emp AS e ;
3 查看视图 ,其实和查看表的命令一样
show create view emp_list_view G;
show table status like 'emp' G; show table status like 'emp_list_view' G;
4 删除视图
DROP VIEW emp_list_view_single;