zoukankan      html  css  js  c++  java
  • MySQL—视图

    【1】视图的概念

    视图(view)是一个从单张或多张基础数据表或其他视图中构建出来的虚拟表。

    同基础表一样,视图中也包含了一系列带有名称的列和行数据,但是数据库中只是存放视图的定义,也就是动态检索数据的查询语句,而并不存放视图中的数据,这些数据依旧存放于构建视图的基础表中,只有当用户使用视图时才去数据库请求相对应的数据,即视图中的数据是在引用视图时动态生成的。因此视图中的数据依赖于构建视图的基础表,如果基本表中的数据发生了变化,视图中相应的数据也会跟着改变。

    PS:视图本质上就是:一个查询语句,是一个虚拟的表,不存在的表,你查看视图,其实就是查看视图对应的sql语句

    【2】视图的好处

    简化用户操作:视图可以使用户将注意力集中在所关心地数据上,而不需要关心数据表的结构、与其他表的关联条件以及查询条件等。

    对机密数据提供安全保护:有了视图,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,避免机密数据(如,敏感字段“salary”)出现在不应该看到这些数据的用户视图上。这样视图就自动提供了对机密数据的安全保护功能

    【3】SQL展示:

    -- 创建/替换单表视图:
    create or replace view myview01
    as
    select empno,ename,job,deptno 
    from emp
    where deptno = 20
    with check option;
    -- 查看视图:
    select * from myview01;
    -- 在视图中插入数据:
    insert into myview01 (empno,ename,job,deptno) values (9999,'lili','CLERK',20);
    insert into myview01 (empno,ename,job,deptno) values (8888,'nana','CLERK',30);
    insert into myview01 (empno,ename,job,deptno) values (7777,'feifei','CLERK',30); 
    -- > 1369 - CHECK OPTION failed 'mytestdb.myview01'
    -- 创建/替换多表视图:
    create or replace view myview02
    as 
    select e.empno,e.ename,e.sal,d.deptno,d.dname
    from emp e
    join dept d
    on e.deptno = d.deptno
    where sal > 2000 ;
    select * from myview02;
    -- 创建统计视图:
    create or replace view myview03
    as
    select e.deptno,d.dname,avg(sal),min(sal),count(1)
    from emp e
    join dept d
    using(deptno)
    group by e.deptno ;
    select * from myview03;
    -- 创建基于视图的视图:
    create or replace view myview04
    as
    select * from myview03 where deptno = 20;
    select * from myview04;
     
    理解
    1. 视图是 MySQL 在 5.0.1 版本中加入的功能。它可以理解为一个虚表
    2. 之所以被称为虚表,是因为它只是存储了一个结构,并不存储真实的数据。它的数据是在查询过程中动态生成的。
    3. 视图并不是真的性能优化
    4. 可以理解为Laravel的路由地址的别名(方便访问)方便查询
    5. 安全 可以隐藏字段 避免字段暴露
    6. 简化SQL语句
    7. 解耦 (比如我们对数据库表重构了 那么只需要修改视图内容就行了 反则需要修改相关的Model 和代码了) 相当于中间件
    8. 不建议使用在大项目 分布式 大数据的项目(损耗性能)单机使用方便点

    注重细节——关注底层——注重细节——关注底层——注重细节——关注底层——注重细节——关注底层——注重细节——关注底层
  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/PJG20/p/13270230.html
Copyright © 2011-2022 走看看