使用 PostgreSQL 中的视图从表中删除行

问题描述 投票:0回答:2

是否可以从带有视图的表中删除行?

如果是,我们如何在 PostgreSQL 中做到这一点?
如果不是,有什么替代方案?

sql database postgresql sql-delete sql-view
2个回答
1
投票

从版本 9.3 开始,PostgreSql 中的视图是可更新的。
请参阅文档:http://www.postgresql.org/docs/9.3/static/sql-createview.html(查找“可更新视图”)以了解视图必须满足的“可更新”条件.

一个非常简单的例子:

create table tbl1  
( rollnumber int,  
name varchar) ;

insert into tbl1 values(1,'abc');  
insert into tbl1 values(2,'def');  
insert into tbl1 values(3,'ghi');

create view view1 as select * from tbl1;


delete from view1 where rollnumber=2;

工作演示:http://sqlfiddle.com/#!15/22c2f/1


0
投票

您可以从带有视图的表中删除行。 *我的帖子详细解释了一个视图。

例如,您创建

person
表,如下所示:

CREATE TABLE person (
  id INTEGER,
  first_name VARCHAR(20),
  last_name VARCHAR(20),
  age INTEGER
);

然后,将 4 行插入到

person
表中,如下所示:

INSERT INTO person (id, first_name, last_name, age) 
VALUES (1, 'John', 'Smith', 27), 
       (2, 'David', 'Miller', 32), 
       (3, 'Robert', 'Brown', 18), 
       (4, 'Mark', 'Davis', 40);

然后调用

person
,得到如下结果:

postgres=# SELECT * FROM person;
 id | first_name | last_name | age
----+------------+-----------+-----
  1 | John       | Smith     |  27
  2 | David      | Miller    |  32
  3 | Robert     | Brown     |  18
  4 | Mark       | Davis     |  40
(4 rows)

然后,您创建

my_view
视图,如下所示:

CREATE VIEW my_view AS
  SELECT first_name, age FROM person;

现在,您可以使用

person
my_view
表中删除 2 行,如下所示。 *
id
last_name
不可用:

DELETE FROM my_view WHERE age = 32 OR age = 40;

然后,从

person
表中删除2行,如下所示:

postgres=# SELECT * FROM person;
 id | first_name | last_name | age
----+------------+-----------+-----
  1 | John       | Smith     |  27
  3 | Robert     | Brown     |  18
(2 rows)
© www.soinside.com 2019 - 2024. All rights reserved.