创建 PostgreSQL 可更新视图

在本教程中,我们将讨论可更新视图的要求,并向您展示如何在 PostgreSQL 中创建可更新视图。

摘要:在本教程中,我们将讨论可更新视图的要求,并向您展示如何在 PostgreSQL 中创建可更新视图。

当满足以下条件时,PostgreSQL 视图是可更新的:

可更新视图可能包含可更新和不可更新的列。如果您尝试插入或更新不可更新的列,PostgreSQL 将引发错误。

当您执行INSERT、UPDATE或DELETE等更新操作时,PosgreSQL 会将此语句转换为底层表的相应语句。

如果您 WHERE 在视图的定义查询中有条件,您仍然可以更新或删除通过视图不可见的行。但是,如果要避免这种情况,可以 CHECK OPTION 在定义视图时使用。

执行更新操作时,必须对视图有相应的权限,但不需要对底层表有权限。但是,视图所有者必须具有基础表的相关权限。

PosgreSQL 可更新视图示例

首先, usa_cities 使用 [CREATE VIEW](https://www.postgresqltutorial.com/managing-postgresql-views/) 语句创建一个新的可更新视图名称。此视图包含 city 表中位于美国且国家/地区 ID 为 103 的所有城市。

CREATE VIEW usa_cities AS SELECT
    city,
    country_id
FROM
    city
WHERE
    country_id = 103;

接下来, usa_cities 通过执行以下 SELECT 语句检查视图中的数据:

SELECT
    *
FROM
    usa_cities;

然后,使用以下语句 city 通过 usa_cities 视图向表中插入一个新城市 INSERT :

INSERT INTO usa_cities (city, country_id)
VALUES('San Jose', 103);

之后,检查 city 表的内容:

SELECT
    city,
    country_id
FROM
    city
WHERE
    country_id = 103
ORDER BY
    last_update DESC;

我们在 city 表中添加了一个新条目。

PostgreSQL 可更新视图 - 添加了新城市

最后,删除通过 usa_cities 视图添加的条目。

DELETE
FROM
    usa_cities
WHERE
    city = 'San Jose';

该条目已 city 通过 usa_cities 视图从表中删除。

在本教程中,我们展示了如何创建 PostgreSQL 可更新视图,并向您介绍了视图必须满足才能自动更新的条件