• 什么是视图


    目录

    一、什么是视图

    二、视图的作用

    三、创建视图

    四、使用视图

    1.使用视图查询员工信息

    五、注意事项

    六、补充


    一、什么是视图

    视图是基于查询的虚拟表,是一个逻辑表,本身并不包含数据。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图就是一条SELECT语句执行后返回的结果集。

    SELECT所查询的表称为视图的基表,而查询的结果集称为虚拟表,视图本身并不存储具体的数据,视图的数据存在于视图的基表中,基本表数据发生了改变,视图的数据也会跟着变化。

    二、视图的作用

    使用视图是为了方便复杂的查询语句。基本思路是将复杂的查询语句定义在视图内部,然后对视图进行查询,从而简化复杂的查询语句。

    为什么要使用视图?

    视图的诸多优点如下:

    1. 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
    2. 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某一行某一列,但是通过视图就可以简单的实现。
    3. 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响,源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

    三、创建视图

    1. CREATE VIEW 视图名
    2. AS
    3. SELECT1,列2...
    4. FROM 表;

    修改视图:

    ALTER VIEW 视图名 AS SELECT 语句

    显示视图创建:

    SHOW CREATE VIEW 视图名;

     查看视图:

    1. SHOW TABLES;
    2. -- 当作普通表使用

    删除视图:

    DROP VIEW 视图名[,视图名...];

     重命名视图:

    RENAME TABLE 视图名 TO 新视图名;

    四、使用视图

    需求:查询员工信息,要求显示员工编号、姓名、所属的部门。

    1. select empno,ename,dname
    2. from emp inner join dept on emp.deptno=dept.deptno;

    这是两张表连接查询,如果查询涉及的表越多,查询变得越复杂。 

    1.使用视图查询员工信息

    定义视图:

    1. CREATE VIEW v_emp
    2. AS
    3. SELECT empno,ename,dname FROM emp INNER JOIN dept ON emp.deptno = dept.deptno;

    使用试图:

    select * from v_emp

     

    五、注意事项

    1. 视图的主要作用与查询相关。
    2. 可以通过视图插入数据,但只能基于一个基表进行插入,不能同时向多个基表插入数据。

    insert into v_emp(empno,dname) values(10,'测试') ;

    3. 可以通过视图修改数据,但只能基于一个基表进行修改,不能同时修改多个基表的数据。

    4. 可以通过视图删除数据,但只能删除单表查询的视图,不能删除多表连接查询视图中的数据。

    5.虽然通过视图也可以对数据进行添加、删除、修改,但不推荐。

    6.使用drop view语句可以删除视图。

    7.select语句不能引入系统或用户变量。

    六、补充

    1. CREATE [OR REPLACE] [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}] VIEW 视图名[(列1,列
    2. 2...)] AS SELECT (列1,列2...)
    3. [WITH [CASCADE | LOCAL] CHECK OPTION]
    • on replace:如果已有同名视图则替换。
    • algorithm:视图算法。
    • undefined:MySQL将自动选择所要使用的算法。
    • merge:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句对应部分。
    • temptable:将视图的结果存入临时表,然后使用临时表执行语句。

     缺省algorithm选项等同于algorithm=undefined

    • check option:表示修改视图时,检查插入的数据是否符合where设置的条件。
    • cascaded/local:表示check option的范围。
    •  当不加local或cascaded时,默认为cascaded。
    • local表示只验证当前视图,检查所依赖的视图有没有检查选项,如果有就会检查所依赖的视图,没有就不检查,cascaded表示所依赖的视图会带上检查选项。
    • 该语句的作用:

             update时,要保证数据update之后能被视图查询出来,也就是要符合where的条件

             insert时,保证insert的数据能被视图查询出来。

             delete时,有无with check option都一样

             对于没有where字句的视图,使用with check option是多余的。

    1. -- 没有 with check option
    2. create view v_emp
    3. as select * from emp;
    4. -- 有 with check option, 视图 sql 中没有 where 所以 with check option 没啥作用
    5. create or replace view v_emp
    6. as select * from emp with check option; -- 相当于 with cascaded check option
    7. -- 有 with check option
    8. create or replace view v_emp
    9. as select * from emp where sal > 2000
    10. with check option;
    11. select * from v_emp;
    12. -- 修改视图值
    13. update v_emp set sal = 2100 where empno = 7788;
    14. -- 通过原表修改
    15. update emp set sal = 10 where empno = 7788;
    16. -- with local check option cascaded
    17. create or replace view v_emp
    18. as select * from emp where sal > 2000;
    19. create or replace view v_v_emp as select * from v_emp where sal > 1000 with local
    20. check option;
    21. select * from v_v_emp;
    22. -- local 只管当前视图
    23. update v_v_emp set sal = 1900 where empno = 7788;
    24. -- cascaded 表示底层视图也要验证
    25. create or replace view v_emp
    26. as select * from emp where sal > 2000;
    27. create or replace view v_v_emp as select * from v_emp where sal > 1000 with cascaded
    28. check option;
    29. update v_v_emp set sal = 1900 where empno = 7788;

  • 相关阅读:
    【C++】动态内存管理 ① ( C 语言中的动态内存管理 | C 语言 内存申请 | C 语言 内存释放 | 代码示例 )
    【组件攻击链】一文看懂 Spring 全家桶各类 RCE 漏洞
    HPE财报:计算存储微降,智能边缘大幅增长
    SSM健康小程序
    Numpy 逻辑函数和位处理函数

    A Survey on Fairness in Large Language Models
    zookeeper
    Centos 7分区失败,进入 dracut 页面,恢复操作
    自然语言处理中的文本聚类:揭示模式和见解
  • 原文地址:https://blog.csdn.net/m0_57229804/article/details/133345102