Mysql(9)_视图

    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;
原文地址:https://www.cnblogs.com/sunnybowen/p/9977292.html