【问题标题】:Automatic View Update in MySqlMySql 中的自动视图更新
【发布时间】:2011-12-26 23:46:41
【问题描述】:

当底层表在 MySQL 中更新而不查询时,视图是否会自动更新?

进一步详细说明 - 如果我更新表,那么即使我没有对视图运行任何查询,视图也会更新吗?

【问题讨论】:

  • 不查询视图如何访问?
  • 他的意思是在更新了一些数据之后,我们可以从view获取最新的数据
  • @diEcho 这几乎就是视图的概念。 MySQL 还没有物化视图。

标签: mysql view


【解决方案1】:

是的,视图在 MySQL 中自动更新;包括但不限于:

  • 更改表结构
  • 在表上插入/更新/删除过程
  • 使用 CREATE OR REPLACE VIEW 更改视图结构

注意:更改表的结构需要重新创建视图。

【讨论】:

    【解决方案2】:

    视图是可作为虚拟表访问的存储查询,由查询的结果集组成。 更改引用表中的数据会更改视图的后续调用中显示的数据。

    见:http://en.wikipedia.org/wiki/View_(database)

    有点像这样.....

    如果你问我现在的时间,我会告诉你现在是十点。

    如果你在 2 小时后问我,我会告诉你现在是 12 点。

    除非你问我,否则我不会一直告诉你时间。

    【讨论】:

    • Brian 询问视图是否会自动更新其数据以防底层表被更新,反之亦然。
    • 我为你添加了一个类比,希望能阐明它是如何工作的。
    【解决方案3】:

    通常 VIEWS 会自动更新。

    来自MySQL Documentation

    有些视图是可更新的。也就是说,您可以在诸如此类的语句中使用它们 作为 UPDATE、DELETE 或 INSERT 来更新底层证券的内容 桌子。为了使视图可更新,必须存在一对一的 视图中的行与视图中的行之间的关系 基础表。还有一些其他的结构可以使 查看不可更新。

    【讨论】:

      【解决方案4】:

      如果您创建了某个表的视图,那么当您更改数据或在其各自的表中插入新数据时,视图中的数据会自动更新。

      但是,如果您想在数据库表中添加更多列并更新其各自的视图,则更改不会自动进行。

      为此,您可以使用“SQLYog”。这是处理视图的好工具。

      【讨论】:

        【解决方案5】:

        每次对视图执行查询时,它都会获取当前表中的数据 - 包括所有已提交的事务,但不包括那些尚未提交的 UPDATE 或 INSERT 查询。

        但是,当然,一旦您获得了该数据,它就不会再次发送它。有触发器,但您的数据库客户端仍然必须查询视图数据。

        再澄清一点:视图不存储(缓存)数据,它是一个逻辑结构,并且总是会查看底层表。

        【讨论】:

        • 是否有任何关于仅读取已提交数据的文档?
        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 2022-10-28
        • 1970-01-01
        • 1970-01-01
        • 2011-12-07
        • 2014-01-14
        • 2013-10-14
        • 1970-01-01
        相关资源
        最近更新 更多