【问题标题】:What are views in MySQL?MySQL中的视图是什么?
【发布时间】:2011-03-21 13:33:21
【问题描述】:

什么是 MySQL 中的视图?什么是观点以及它们在现实世界中的使用频率。

我是在外行解释之后,如果可能的话,请举个例子来帮助我理解!

提前谢谢你;-)

【问题讨论】:

    标签: sql mysql views


    【解决方案1】:

    这篇小文章很好地解释了MySQL中的视图:Views and More in MySQL 5.0

    【讨论】:

      【解决方案2】:

      您可以将视图视为动态生成的表。在您的查询中,它的行为类似于普通表,但不是存储在磁盘上,而是在需要时从创建视图时定义的 SQL 语句动态创建。

      要创建视图,请使用:

      CREATE VIEW first_names AS SELECT first_name FROM people WHERE surname='Smith'
      

      然后您可以将此视图用作普通表。诀窍是当您更新表 people 时,first_names 视图也会更新,因为它只是 SELECT 语句的结果。

      这个查询:

      SELECT * FROM first_names
      

      将返回表 people 中名为 Smith 的人的所有名字。如果您更新 people 表并重新运行查询,您将看到更新后的结果。

      基本上,您可以用嵌套的 SELECT 语句替换视图。但是,视图有一些优势:

      • 更短的查询 - 嵌套的 SELECT 语句使查询更长
      • 提高了可读性 - 如果视图有一个合理的名称,则查询更容易理解
      • 更快的速度 - 视图的 SELECT 语句存储在数据库引擎中并预先解析,因此不需要从客户端传输并一遍又一遍地解析
      • 缓存和优化 - 数据库引擎可以缓存视图并执行其他优化

      【讨论】:

        【解决方案3】:

        很简单:视图是虚拟表。

        视图基于对“真实”表的 SELECT 查询,但不同之处在于视图不像真实表那样存储信息。视图只引用表并按照 SELECT 所说的方式组合它们。这使得经常使用的查询更加简化。

        这是一个简单的例子。假设您有一张员工表和一张部门表,并且您想查看他们的薪水。首先,您可以创建工资视图。

        CREATE VIEW SALARIES
        AS  
        SELECT e.name,
               e.salary,
               d.name
        FROM employees AS e, deparments as d
        WHERE e.depid = d.depid
        ORDER BY e.salary DESC
        

        此查询列出员工姓名、工资和部门,并按工资降序排列。完成此操作后,您可以使用以下查询:

         SELECT * from SALARIES
        

        在更大的范围内,您可以创建一个计算员工平均工资的视图,并列出工资低于平均工资的人员。在现实生活中,此类查询要复杂得多。

        【讨论】:

          【解决方案4】:

          视图是一种预先定义某些查询的方式。它可以像表一样被查询,由查询定义而不是磁盘上的一组数据。查询它可以查询表的结果。

          在大多数情况下,查询视图可以视为等效于将视图的定义查询用作主查询中的子查询。视图允许查询更短和更模块化(因为公共部分在视图中单独定义)。它们还提供了优化的机会(尽管并非所有数据库都这样做;我不确定 MySQL 是否提供任何优化以使视图更快)。

          如果您更新基础表,针对视图的查询将自动反映这些更改。

          【讨论】:

            【解决方案5】:

            普通视图只不过是可查询的查询。

            例子:

            您有两个表,orders 和 customers,orders 有 id、customer_id、performance_date 字段,customers 有 id、first_name、last_name。

            现在假设您想同时显示订单 ID、执行日期和客户名称,而不是发出此查询:

            SELECT    o.id as order_id, c.first_name + ' ' + c.last_name as customer_name,
                      o.performance_date 
            FROM      orders o inner join customers c
            

            您可以将该查询创建为视图并将其命名为 orders_with_customers,您现在可以在您的应用程序中发出查询

            SELECT   *
            FROM     orders_with_customer
            

            一个好处是抽象,您可以更改存储客户姓名的方式,例如包含中间名,并且只需更改视图查询。所有使用该视图的应用程序都会继续这样做,但现在包含中间名。

            【讨论】:

              【解决方案6】:

              在 mysql 中,视图是一个存储的选择语句

              看看这个答案:MySQL Views - When to use & when not to

              【讨论】:

                【解决方案7】:

                简单来说

                在 SQL 中,视图是虚拟表 基于 SQL 的结果集 声明。

                一个视图包含行和列,只是 像一张真正的桌子。 a中的字段 视图是来自一个或多个真实的字段 数据库中的表。

                您可以添加 SQL 函数、WHERE 和 将语句加入视图并呈现 数据好像数据即将到来 一张桌子。

                Source

                除此之外,您可以从view 在基础table 中插入行,前提是视图引用了唯一一个表并且视图中未引用的列允许为空。

                【讨论】:

                  【解决方案8】:

                  它们是常用过滤器的简写。

                  假设您有一个包含已删除列的记录表。通常您不会对已删除的记录感兴趣,因此您可以创建一个名为 Records 的视图,从 AllRecords 表中过滤掉已删除的记录。

                  这将使您的代码清理干净,因为您不必在每个语句中附加/前置deleted != 1

                  SELECT * FROM Records
                  

                  将返回所有未删除的记录。

                  【讨论】:

                    【解决方案9】:
                    猜你喜欢
                    • 2014-03-01
                    • 2017-11-14
                    • 2010-09-20
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-10-04
                    • 2011-08-23
                    • 2022-11-29
                    相关资源
                    最近更新 更多