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

dpiehjr4  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(2)|浏览(134)

是否可以从带有视图的表中删除行?
如果是,我们如何在PostgreSQL中做到这一点?
若否,有何替代办法?

whitzsjs

whitzsjs1#

从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/22 c2f/1

1bqhqjot

1bqhqjot2#

您可以使用视图从表中删除行。* My post详细解释了视图。
例如,创建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_v视图,如下所示:

CREATE VIEW my_v AS
  SELECT first_name, age FROM person;


现在,您可以使用my_vperson表中删除2行,如下所示。* idlast_name不可用:

DELETE FROM my_v 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)

相关问题