九月 9, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的DROP VIEW
语句从数据库中删除一个或多个视图。
目录
PostgreSQL DROP VIEW 语句简介
DROP VIEW
语句从数据库中删除视图。下面说明了DROP VIEW
语句的语法:
DROP VIEW [IF EXISTS] view_name
[CASCADE | RESTRICT]
在这个语法中:
- 首先,在
DROP VIEW
关键字后指定视图的名称。 - 其次,使用
IF EXISTS
选项仅删除存在的视图。如果您不使用IF EXISTS
选项并删除不存在的视图,PostgreSQL 将发出错误。但是,如果您使用IF EXISTS
选项,PostgreSQL 只会发出通知。 - 第三,如果有任何对象依赖于视图,请使用
RESTRICT
选项拒绝删除视图。RESTRICT
选项是默认选项。如果使用CASCADE
选项,则DROP VIEW
会自动删除依赖于视图的对象以及依赖于这些对象的所有对象。
要使用单个语句删除多个视图,请在DROP VIEW
关键字后面指定以逗号分隔的视图名称列表,如下所示:
DROP VIEW [IF EXISTS] view_name1, view_name2, ...;
要执行DROP VIEW
语句,您必须是视图的所有者。
PostgreSQL DROP VIEW 语句示例
请参阅示例数据库中的film
、film_category
和category
表,如下:
让我们为练习创建新的视图。
以下语句根据这些表中的信息创建一个视图:
CREATE VIEW film_master
AS
SELECT
film_id,
title,
release_year,
length,
name category
FROM
film
INNER JOIN film_category
USING (film_id)
INNER JOIN category
USING(category_id);
以下语句创建一个基于film_master
视图实现的horror_film
视图:
CREATE VIEW horror_film
AS
SELECT
film_id,
title,
release_year,
length
FROM
film_master
WHERE
category = 'Horror';
以下语句还创建了一个基于film_master
视图实现的comedy_film
视图:
CREATE VIEW comedy_film
AS
SELECT
film_id,
title,
release_year,
length
FROM
film_master
WHERE
category = 'Comedy';
以下语句创建一个按类别返回电影数量的视图:
CREATE VIEW film_category_stat
AS
SELECT
name,
COUNT(film_id)
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name;
以下创建一个视图,返回每个类别的电影总长度:
CREATE VIEW film_length_stat
AS
SELECT
name,
SUM(length) film_length
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name;
1) 使用 DROP VIEW 删除一个视图
以下示例使用DROP VIEW
语句来删除comedy_film
视图:
DROP VIEW comedy_film;
2) 使用 DROP VIEW 语句删除具有依赖对象的视图
以下语句使用DROP VIEW
语句删除film_master
视图:
DROP VIEW film_master;
PostgreSQL 发出错误:
ERROR: cannot drop view film_master because other objects depend on it
DETAIL: view horror_film depends on view film_master
HINT: Use DROP ... CASCADE to drop the dependent objects too.
SQL state: 2BP01
film_master
有一个依赖对象,即horror_film
视图。
要删除视图film_master
,您需要首先删除其依赖对象,或使用CASCADE
选项,如下:
DROP VIEW film_master
CASCADE;
该语句删除film_master
视图及其依赖对象(即horror_film
)。它发出如下通知:
NOTICE: drop cascades to view horror_film
3) 使用 DROP VIEW 删除多个视图
以下语句使用单个DROP VIEW
语句删除多个视图:
DROP VIEW film_length_stat, film_category_stat;
概括
- 使用
DROP VIEW
语句从数据库中删除一个或多个视图。 - 使用
IF EXISTS
选项删除视图(如果存在)。 - 使用
CASCADE
选项以递归方式删除视图及其依赖对象。