• asdf100
    2019-07-08
    视图的底层原理是什么?执行一个查询语句是会有哪些操作步骤?

    作者回复: 一个视图其实是SELECT语句的集合,执行时会提前编译好,可以反复使用。在底层执行顺序的时候和SELECT语句是一样:
    1、FROM子句组装数据
    2、WHERE子句进行条件筛选
    3、GROUP BY分组
    4、使用聚集函数进行计算;
    5、HAVING筛选分组;
    6、计算所有的表达式;
    7、SELECT 的字段;
    8、ORDER BY排序
    9、LIMIT筛选

    
     24
  • 悟空
    2019-07-08
    视图的作用:

    1、视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。

    2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限),从而加强了安全性,使用户只能看到视图所显示的数据。
    3、视图还可以被嵌套,一个视图中可以嵌套另一个视图。
    注意:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
    展开

    作者回复: 总结的不错

    
     9
  • 一叶知秋
    2019-07-08
    优点:在总结中有写,安全、清晰 。
    缺点:的话感觉就是如果需要额外的字段就需要更新视图吧...(感觉说的也不对

    更新视图对基本表数据有影响。(比如update视图实际上就是对基本表的更新操作)
    证明如下:
    mysql> select * from team_score;
    +---------+-----------+-----------+--------------+--------------+------------+
    | game_id | h_team_id | v_team_id | h_team_score | v_team_score | game_date |
    +---------+-----------+-----------+--------------+--------------+------------+
    | 10001 | 1001 | 1002 | 102 | 111 | 2019-04-01 |
    | 10002 | 1002 | 1003 | 135 | 134 | 2019-04-10 |
    +---------+-----------+-----------+--------------+--------------+------------+
    2 rows in set (0.00 sec)

    mysql> create view h_team_score as select game_id, h_team_score from team_score;
    Query OK, 0 rows affected (0.01 sec)

    mysql> update h_team_score set h_team_score=103 where game_id=10001;
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from team_score;
    +---------+-----------+-----------+--------------+--------------+------------+
    | game_id | h_team_id | v_team_id | h_team_score | v_team_score | game_date |
    +---------+-----------+-----------+--------------+--------------+------------+
    | 10001 | 1001 | 1002 | 103 | 111 | 2019-04-01 |
    | 10002 | 1002 | 1003 | 135 | 134 | 2019-04-10 |
    +---------+-----------+-----------+--------------+--------------+------------+
    2 rows in set (0.00 sec)
    展开

    作者回复: Good Job

     2
     6
  • Geek_weizhi
    2019-07-13
    本文章对我帮助很大!

    作者回复: 谢谢!

    
     4
  • cricket1981
    2019-07-08
    视图都是只读的吗?

    作者回复: 可以修改数据,不过一般还是用来view数据

    
     4
  • 化作春泥
    2019-07-08
    用视图查询效率比直接sql连接查询,效率怎么样?
     3
     4
  • 极客星星
    2019-07-09
    你好 想问下 当我接到一个需求时 我可以创建一个新表来实现 也可以创建一个视图来实现 这两种之间应该如何做选择呢
     1
     3
  • 一步
    2019-07-08
    视图我的理解是对 SQL 查询语句的提前封装,不保存数据。所以更新视图的时候,只是更新提前封装好的查询语句,不会影响到数据表
    
     3
  • 假装自己不胖
    2019-07-15
    视图在什么时候创建?在初始化的时候?什么时候消失?只要在drop的时候才会失效吗?如果是这样,那和表的区别也就不大了,虚拟表和真表有什么区别?
    
     2
  • Sam
    2019-07-09
    视图可以理解成给一个查询SQL起个别名,以后想执行同样的SQL,就不需要每次都输入同样的SQL文本,只需要查询视图就可以了;
    当然视图也有特殊的功能,比如权限控制,通过视图只开发特定的列的查询权限给其他人,还有物化视图。
    
     2
  • 我
    2019-07-08
    可是工作中我们实际都是将权限控制放到了代码层面去控制的,希望老师也能讲解下物化视图和普通视图区别及底层原理。
    
     2
  • 暮雨
    2019-11-21
    视图查询效率很低

    作者回复: 对 所以需要根据需求进行选择

    
     1
  • 爱思考的仙人球
    2019-10-17
    视图的优点是隔绝数据表操作,可以对不同的用户提供不同的结果集,让用户只看到自己该看到的内容;缺点是灵活性差,有时候可能缺少想看的数据。

    作者回复: 对的

    
     1
  • 醉红颜
    2019-09-20
    陈老师,您好!我这儿有个问题,当视图创建成功后,之后对相应表有更新,该视图会自动更新吗?

    作者回复: 视图是虚拟的表,当数据表有更新的时候,视图也会自动更新的

     1
     1
  • 不才~
    2019-08-08
    视图创建之后会保留在数据库吗?以后可以调用吗?

    作者回复: 可以重复使用的

    
     1
  • Monday
    2019-08-07
    是不是可以这样理解,在查看sql的执行计划时,试图换成创建的脚本就行(select 后面部分)
    
     1
  • heliu
    2019-07-26
    我觉得视图类似于封装编程中的输出函数.
    
     1
  • muofeng
    2019-07-09
    想问一个刚刚发现的问题,使用过滤条件"between...and...",一般会包含边界的数值吗?我试了一下"SELECT * FROM player_height_grades WHERE height BETWEEN 1.91 AND 2.08;",发现过滤出来的数值没有包含前面的1.91,但是包含了2.08。我用的数据库版本为mysql 8.0.13。
    
     1
  • 风轻扬
    2020-01-01
    老师,有两个问题请教
    1 .视图建立成功后,默认及时不允许删除和修改的吧?
    2 .如果业务需要删除和修改呢?有哪几种方式
    
    
  • 高泽林
    2019-12-17
    了解了!安全查询!
    
    
我们在线,来聊聊吧