【问题标题】:Creating MYSQL VIEW with SELECT *使用 SELECT * 创建 MYSQL VIEW
【发布时间】:2017-11-28 22:49:11
【问题描述】:

在 MYSQL 中创建视图

如果我写SELECT * FROM ... as a VIEW,视图会将其永久存储为 * 还是实际选择当前列并将查询存储为那个(而不是存储SELECT *,它将存储SELECT foo,bar,biz 等)

我多次阅读到使用SELECT * FROM ... 是不好的做法,原因有很多,包括提到的HEREHERE。所以我确实希望避免这些问题。

【问题讨论】:

    标签: mysql sql select views wildcard


    【解决方案1】:

    在 MySQL 中创建存储视图可能会带来意想不到的性能后果。仔细考虑创建存储视图是否是该问题的适当解决方案。或者,创建视图是否会潜在地产生比实现它要解决的问题更大的问题。


    假设表 test.foo 存在,您提出的问题可以用一个简单的测试用例来回答...

     USE test ; 
    
     CREATE VIEW voo AS SELECT * FROM foo ;
    
     SHOW CREATE VIEW voo ; 
    
     DROP VIEW voo ;
    

    【讨论】:

    • 感谢您的回复我不知道存在未存储的视图之类的东西,这可能会让我重写我的问题。例如,存储视图与简单地在 phpmyadmin 中创建视图不同吗?
    • 一个 stored 视图而不是 inline 视图。在 MySQL 用语中,内联视图被称为“派生表”,例如SELECT * FROM (SELECT * FROM foo) voo. 括号之间的位有一个“内联视图”,分配了一个别名“voo”。我们可以创建一个 stored 视图定义(作为答案中的示例),然后 SELECT * FROM voo 达到相同的净效果(和性能问题)。不同之处在于,voo 的定义存在于查询中 inline 中,并且仅在该上下文中可用。 存储的视图在其他上下文中可用。
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2010-10-02
    • 2012-08-11
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多