【问题标题】:What are some good examples of applying VIEW in MySQL? [closed]有哪些在 MySQL 中应用 VIEW 的好例子? [关闭]
【发布时间】:2011-03-26 02:52:25
【问题描述】:

我读过MySQLCREATE VIEW 语法,但从未在实践中使用过。

请给我看一些它的应用例子。

【问题讨论】:

标签: mysql sql view


【解决方案1】:

非物化视图实际上是一个宏 - 引用视图意味着它包含的查询在视图引用位置使用。即:

CREATE VIEW your_vw AS
   SELECT *
     FROM EMPLOYEES

这个:

SELECT * FROM your_vw

...将返回一个与您使用的结果集相匹配的结果集:

SELECT x.*
  FROM (SELECT *
          FROM EMPLOYEES) x

我提到了非物化,但 MySQL 不支持物化视图。其他数据库(Oracle、SQL Server 称它们为“索引视图”、DB2)支持物化视图,但这不是问题所在。从现在开始,我在写视图的时候只讲非物化视图。

视图用于封装/抽象 - 除非用户有权访问,否则他们无法看到视图的底层查询是什么。这取决于情况是好是坏 - 如果您担心提供数据模型信息,那就太好了;在大多数其他情况下不好。在视图中使用 ORDER BY 是不好的,因为它需要资源来应用订单,由于封装/抽象,其他人可能会将订单应用到 - 这是资源的浪费。分层视图(基于视图构建的视图)也是另一种不好的做法 - 在视图运行之前不会出现错误。

视图用于提供对数据的访问而不需要授予对表的访问权限,但它们已经发展为支持更新基础表。在这种情况下,我更愿意授予对表的访问权限。

【讨论】:

    【解决方案2】:

    不管 RDBMS 是什么,视图都用于简化或限制对基础表的访问。

    一个示例是更改列的名称以使最终用户更容易理解和使用它们,以及非规范化连接。

    另一个是防止访问敏感信息(例如工资单):从表中删除所有权限并通过视图提供受控访问。

    【讨论】:

    • 视图可以更新 - MySQL,Oracle 和 SQL Server 支持该功能。
    • @OMG 小马:当然。我希望没有给人留下他们不可能的印象。我提供了一个可能不存在的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2010-10-07
    • 2011-10-30
    • 2020-11-23
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    相关资源
    最近更新 更多