创建如果不存在的视图?

40

在MySQL或H2数据库中,是否有办法使用create view if not exists创建视图?

3个回答

36

来自 MySQL 5.0 参考手册的第12.1.12节CREATE VIEW语法

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]

CREATE VIEW语句用于创建新的视图,如果指定了OR REPLACE子句则会替换现有的视图。此语句在MySQL 5.0.1中添加。如果视图不存在,则CREATE OR REPLACE VIEW与CREATE VIEW相同。如果视图存在,则CREATE OR REPLACE VIEW等同于ALTER VIEW。


这部分回答了问题;你如何在H2中实现? - Nicolas
5
使用CREATE OR REPLACE创建视图的结果与使用CREATE IF NOT EXISTS不同。前者会覆盖现有视图,而后者不会(如果在MySQL中可用的话......) - obe

34

通常的方式是使用create or replace覆盖一个视图:

create or replace view YourView
as
select * from users

5
如果替换了现有的视图,它的依赖视图是否会变得无效?这就是需要测试视图存在性的原因。 - flymike
1
在 SQL Server 中是 create or alter view YourView as ... - sports

3

在 H2 中,您可以在要创建的视图名称之前添加 IF NOT EXISTS

例如:

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

这是H2数据库吗?https://www.h2database.com/html/commands.html#create_view 我找不到任何IF NOT EXISTS的地方。 - petrch
是的,这是针对H2的。在您刚才发布的链接中,您可以在标题为“CREATE VIEW”的图像下看到“IF NOT EXISTS” - Daniel
哦,谢谢,是我的错,我显然搜索得不够好。对不起。 - petrch
我正在使用的服务器(可能是旧版本)是MySQL 5.5版本,不识别“IF NOT EXISTS”,但“CREATE OR REPLACE VIEW…”可以正常工作。 - ChrCury78
明白。我写的这个命令是针对H2数据库的。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接