DROP VIEW 语句 删除数据库中的 view

所需权限

用户必须用户删除视图的DROP 权限。删除某个视图时,如果有视图依赖这个视图时,使用CASCADE删除这些依赖视图时,用户必须拥有这些视图的DROP 权限。

概要

图片

参数

Parameter Description
IF EXISTS 如果视图存在,删除这个视图,如果不存在,不返回错误
table_name 视图名字,多个视图使用逗号隔开。 通过

SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';可以查看视图名字
CASCADE 对于一个要删除的视图,删除这个依赖这个视图的视图.

CASCADE 不会列出删除的对象,请谨慎使用
RESTRICT (Default) 当有其他视图依赖某个视图时,不能删除该视图

例子

删除视图 (没有依赖)

在这个例子中,没有其他视图依赖这个要删除的视图。

> SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';
+---------------+-------------------+--------------------+------------+---------+
| TABLE_CATALOG |   TABLE_SCHEMA    |     TABLE_NAME     | TABLE_TYPE | VERSION |
+---------------+-------------------+--------------------+------------+---------+
| def           | bank              | user_accounts      | VIEW       |       1 |
| def           | bank              | user_emails        | VIEW       |       1 |
+---------------+-------------------+--------------------+------------+---------+
(2 rows)
> DROP VIEW bank.user_emails;
DROP VIEW
> SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';
+---------------+-------------------+--------------------+------------+---------+
| TABLE_CATALOG |   TABLE_SCHEMA    |     TABLE_NAME     | TABLE_TYPE | VERSION |
+---------------+-------------------+--------------------+------------+---------+
| def           | bank              | user_accounts      | VIEW       |       1 |
+---------------+-------------------+--------------------+------------+---------+
(1 row)

删除视图 (有依赖)

在这个例子中,有其他的视图依赖某个要删除的视图。因此,使用CASCADE时,在删除某个视图后,也会删除依赖这个视图的视图。

Warning: CASCADE 删除 所有 依赖视图,但是不会列出来,可能会造成不可预料的损失。所以,为了避免上面的情况出现,我们建议单独删除这些视图。

> SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';
+---------------+-------------------+--------------------+------------+---------+
| TABLE_CATALOG |   TABLE_SCHEMA    |     TABLE_NAME     | TABLE_TYPE | VERSION |
+---------------+-------------------+--------------------+------------+---------+
| def           | bank              | user_accounts      | VIEW       |       1 |
| def           | bank              | user_emails        | VIEW       |       1 |
+---------------+-------------------+--------------------+------------+---------+
(2 rows)
> DROP VIEW bank.user_accounts;
pq: cannot drop view "user_accounts" because view "user_emails" depends on it
> DROP VIEW bank.user_accounts CASCADE;
DROP VIEW
> SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';
+---------------+-------------------+--------------------+------------+---------+
| TABLE_CATALOG |   TABLE_SCHEMA    |     TABLE_NAME     | TABLE_TYPE | VERSION |
+---------------+-------------------+--------------------+------------+---------+
| def           | bank              | create_test        | VIEW       |       1 |
+---------------+-------------------+--------------------+------------+---------+
(1 row)

See Also