【问题标题】:views data can be updatable every day in mysql?mysql中的views数据可以每天更新吗?
【发布时间】:2013-09-25 17:56:05
【问题描述】:

我在这里创建一个视图

CREATE VIEW customerusage
AS
SELECT group_concat(customername SEPARATOR ' ||| '),
    customerlocation,
    customerid,
    product
FROM customer AS c
INNER JOIN product AS p ON (c.product_id = c.product_id)
GROUP BY product_id

这张表是每天更新的,如果每分钟都更新一次就太好了。我该如何更新它。除了视图之外的任何选项都可以吗?

【问题讨论】:

  • 更新是什么意思?每次表发生变化时,视图都会更新。
  • 每分钟,客户和产品表中的值都在变化,我需要跟踪最后一分钟的数据并存储在视图中,并且每分钟都应该自动化,这可能吗?
  • 我想你误解了VIEW 是什么。您不能将值存储在值中。它是只读虚拟表,是您的SELECT 语句的投影。
  • 您不需要更新视图。只要基础表发生变化,它就会更新。
  • 你能说一下,在mysql中有没有其他方法可以完成这个过程?

标签: mysql


【解决方案1】:

您需要使您的视图可更新。见http://dev.mysql.com/doc/refman/5.6/en/view-updatability.html

总结:

如果视图中的行与要更新的基表中的行之间存在一对一的关系,则视图是可更新的

如果视图是可更新的并且存在于基表中但未在视图中命名的列具有默认值,则该视图是可插入

我认为,group_concat(customername SEPARATOR ' ||| ') 表达式将打破一对一的关系。 IE。此表达式可能会阻止您的视图可更新。

表达式GROUP BY product_id 肯定会破坏视图和基表之间的一对一关系。

反之,当您在基表上更新/插入时,它将根据一对一的关系反映在视图上。如果存在这样的关系,视图将使用MERGE 算法,并且基表中的修改将反映在视图中。如果不存在这样的一对一关系,则使用的算法将是TEMPLATE,这意味着将为视图创建一个临时表。查看算法见http://dev.mysql.com/doc/refman/5.0/en/view-algorithms.html

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 2020-12-04
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多