在 MySQL 中应用 VIEW 有哪些好的例子?

发布于 2024-10-26 09:34:09 字数 91 浏览 1 评论 0原文

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

请给我展示一些它的应用示例。

I have read about the CREATE VIEW syntax of MySQL, but never used it in practice.

Please show me some examples of its applications.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

多彩岁月 2024-11-02 09:34:14

无论使用哪种 RDBMS,视图都用于简化或限制对基础表的访问。

一个例子是更改列的名称,使最终用户更容易理解和使用它们,并对联接进行非规范化。

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

Regardless of the RDBMS, a View is used to simplify or restrict access to underlying tables.

One example is changing the names of columns to make them easier to uderstand and consume by end users, and denormalising joins.

Another is preventing access to sensitive information (such as payroll): all permissions are removed from tables and controlled access provided through views.

没︽人懂的悲伤 2024-11-02 09:34:13

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

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 是不好的,因为它需要资源来应用订单,而由于封装/抽象,其他人可能会应用 order by - 这是资源的浪费。分层视图(基于视图构建的视图)也是另一种不好的做法 - 在视图运行之前您不会收到错误。

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

A non-materialized view is effectively a macro - referencing a view means the query it contains is used in the view references place. IE:

CREATE VIEW your_vw AS
   SELECT *
     FROM EMPLOYEES

This:

SELECT * FROM your_vw

...will return a resultset that matches what you'd get from using:

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

I mentioned non-materialized, but MySQL doesn't support materialized views. Other databases (Oracle, SQL Server calls them "indexed views", DB2) support materialized views, but that's not the question. From now on, I'll only talk about non-materialized views when I write about views.

Views are used for encapsulation/abstraction - unless the user has access, they can't see what the underlying query for a view is. This is good/bad depending on the situation - good if you're worried about giving out data model information; bad in most other cases. Using an ORDER BY in a view is bad because it takes resources to apply the order, which because of encapsulation/abstraction someone else might apply an order by to -- it's a waste of resources. Layering views (views built on views) is also another bad practice - you won't get an error until the view is run.

Views used to provide access to data without needing to grant access to the table, but they've evolved to support updating the underlying table. I prefer to grant access to the table for such situations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文