仅在 1 个基表中更新数据库联接视图

Posted

技术标签:

【中文标题】仅在 1 个基表中更新数据库联接视图【英文标题】:Updating a Database Joined view in only 1 base table 【发布时间】:2013-07-24 05:29:02 【问题描述】:

我有一个数据库视图,它由连接 2 个基表组成,比如表 1、表 2。 我想确保,无论何时,在视图上调用更新或插入,它只更新表 1 的列,并将表 2 的列保留为 NULL。 有可能吗?

【问题讨论】:

【参考方案1】:

不,如果您想通过数据库视图更新或插入该视图,则应使用只使用一个表创建该视图。请考虑以下示例。

准备表tabtab2

create table tab
   (
      id int
   )

    create table tab2
   (
      id int
   )

准备表vtabvtabbothvtabboth 有一个join

   create view vtab
   as
   select * from tab

   create view vtabboth
   as
   select t.id as tid ,t2.id as t2id from tab t
   join tab2 t2 on t.id = t2.id   

下面的插入将起作用

   insert into vtab
   values (1)

下面插入

   insert into vtabboth
   values (1,1)

会报错:

视图“vtabboth”不可更新,因为 FROM 子句名称 多个表。

【讨论】:

以上是关于仅在 1 个基表中更新数据库联接视图的主要内容,如果未能解决你的问题,请参考以下文章

物化视图快速刷新 - 更新基表时插入和删除

视图基表中的 SQL 更新行

插入(或更新)到基表后视图是不是立即更新

如何从包含要更新的基表中的数据的连接表中获取数据?

在 MySQL 中更新视图

访问表单无法传递视图的主键(到 SQL 服务器)