利用sql语句如何更新视图

我的视图是从两个表得出的,现在我想更新视图,他会显示试图不可更新,因为他涉及多个基表,这个问题怎么解决啊,急!!!!!!!!... 我的视图是从两个表得出的,现在我想更新视图,他会显示试图不可更新,因为他涉及多个基表,这个问题怎么解决啊,急!!!!!!!! 展开
 我来答
糖糖寳寳
推荐于2017-09-11 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:3935万
展开全部
  更新视图有以下三条规则:
  (1) 若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。
  (2) 若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。
  (3) 若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。

  视图只有满足下列条件才可更新:
  1、select语句在选择列表中没有聚合函数,也不包含TOP,GROUP BY,UNION(除非视图是分区视图)或DISTINCT子句。聚合函数可以用在FROM子句的子查询中,只要不修改函数返回的值。
  2、select语句的选择列表中没有派生列。派生列是由任何非简单列表达式(使用函数、加法或减法运算符等)所构成的结果集列。
  3、select语句中的FROM子句至少引用一个表。select语句不能只包含非表格格式的表达式(即不是从表派生出的表达式)。
  4、INSERT,UPDATE和DELETE语句在引用可更新视图之前,也必须如上述条件指定的那样满足某些限制条件。只有当视图可更新,并且所编写的UPDATE或INSERT语句只修改视图的FROM子句引用的一个基表中的数据时,UPDATE和INSERT语句才能引用视图。
  只有当视图在其FROM子句中只引用一个表时,DELETE语句才能引用可更新的视图。
阴国英寸女
2017-09-17 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:35%
帮助的人:834万
展开全部
insert
into
article
(id,class,title,content)
select
id,'2',title,content
from
article
where
class='1'
如果id为自动编号,就把改为:
insert
into
article
(class,title,content)
select
'2',title,content
from
article
where
class='1'
如果class为数字类型,则去掉单引号.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黑色7号虎
推荐于2017-10-07 · TA获得超过117个赞
知道答主
回答量:23
采纳率:0%
帮助的人:37.7万
展开全部
1L错误,如果视图只是单表组成的,是可以更新的.
但是你的视图是两个表得出的,里面有多表关联,这种情况是不能更新视图的.
如果要更新,建议使用触发器,分别更新单个表,从而达到相同的目的.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljaxf1314
2010-11-09 · 超过23用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:63.7万
展开全部
视图是虚拟表,仅供查询,不能更新,
可以直接更新两个查询表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式