【问题标题】:create if not exists view?如果不存在则创建视图?
【发布时间】:2011-03-20 00:27:33
【问题描述】:

有没有办法在 MySQL 或 H2 数据库中create view if not exists

【问题讨论】:

    标签: sql mysql view h2


    【解决方案1】:

    通常的方法是使用create or replace覆盖视图:

    create or replace view YourView
    as
    select * from users
    

    【讨论】:

    • 但是,如果现有视图被替换,它的依赖视图不会失效吗?这就是为什么需要测试视图是否存在的原因。
    • 在 SQL Server 中是 create or alter view YourView as ...
    【解决方案2】:

    来自 MySQL 5.0 参考手册的12.1.12. CREATE VIEW Syntax 部分:

    CREATE VIEW Syntax
    
    CREATE
        [OR REPLACE]
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]
        [SQL SECURITY { DEFINER | INVOKER }]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]
    

    如果给出 OR REPLACE 子句,CREATE VIEW 语句创建一个新视图,或替换现有视图。此语句是在 MySQL 5.0.1 中添加的。如果视图不存在,CREATE OR REPLACE VIEW 与 CREATE VIEW 相同。如果视图确实存在,则 CREATE OR REPLACE VIEW 与 ALTER VIEW 相同。

    【讨论】:

    • 这部分回答了这个问题;你是如何在 H2 中做到这一点的?
    • 使用 CREATE OR REPLACE 的结果与 CREATE IF NOT EXISTS 不同。前者会覆盖现有视图,而后者不会(如果它在 MySQL 中可用...)
    【解决方案3】:

    H2 上,您可以在要创建的视图名称前添加 IF NOT EXISTS。 例如:

    CREATE VIEW IF NOT EXISTS viewExampleName (column1, column2) 
    AS ( 
        SELECT column1, column2
        FROM example_table 
    ); 
    

    【讨论】:

    • 这是H2数据库吗? h2database.com/html/commands.html#create_view我在任何地方都看不到IF NOT EXISTS
    • 是的,它适用于 H2。在您刚刚发布的链接上,您可以在标题 “CREATE VIEW” 下的图片上看到 “IF NOT EXISTS”
    • 哦,谢谢,我的错,我的搜索显然很糟糕。对不起。
    • 我使用的服务器(可能是旧的)是 MySQL 5.5 版,无法识别“如果不存在”但“创建或替换视图 ..”工作正常。
    • 明白。我写的这个命令是针对 H2 数据库的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2021-05-02
    相关资源
    最近更新 更多