利用sql语句对数据库表的数据更新及视图操作遇到的问题及解决方法

1个回答
展开全部
摘要  更新视图有以下三条规则:  (1)若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。  (2)若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。  (3)若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。  视图只有满足下列条件才可更新:  1、select语句在选择列表中没有聚合函数,也不包含TOP,GROUPBY,UNION(除非视图是分区视图)或DISTINCT子句。聚合函数可以用在FROM子句的子查询中,只要不修改函数返回的值。  2、select语句的选择列表中没有派生列。派生列是由任何非简单列表达式(使用函数、加法或减法运算符等)所构成的结果集列。  3、select语句中的FROM子句至少引用一个表。select语句不能只包含非表格格式的表达式(即不是从表派生出的表达式)。  4、INSERT,UPDATE和DELETE语句在引用可更新视图之前,也必须如上述条件指定的那样满足某些限制条件。只有当视图可更新,并且所编写的UPDATE或INSERT语句只修改视图的FROM子句引用的一个基表中的数据时,UPDATE和INSERT语句才能引用视图。  只有当视图在其FROM子句中只引用一个表时,DELETE语句才能引用可更新的视图。
咨询记录 · 回答于2022-12-21
利用sql语句对数据库表的数据更新及视图操作遇到的问题及解决方法
 更新视图有以下三条规则:  (1)若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。  (2)若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。  (3)若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。  视图只有满足下列条件才可更新:  1、select语句在选择列表中没有聚合函数,也不包含TOP,GROUPBY,UNION(除非视图是分区视图)或DISTINCT子句。聚合函数可以用在FROM子句的子查询中,只要不修改函数返回的值。  2、select语句的选择列表中没有派生列。派生列是由任何非简单列表达式(使用函数、加法或减法运算符等)所构成的结果集列。  3、select语句中的FROM子句至少引用一个表。select语句不能只包含非表格格式的表达式(即不是从表派生出的表达式)。  4、INSERT,UPDATE和DELETE语句在引用可更新视图之前,也必须如上述条件指定的那样满足某些限制条件。只有当视图可更新,并且所编写的UPDATE或INSERT语句只修改视图的FROM子句引用的一个基表中的数据时,UPDATE和INSERT语句才能引用视图。  只有当视图在其FROM子句中只引用一个表时,DELETE语句才能引用可更新的视图。
图中是操作内容,实操中可能会出现哪些问题?
,每次只能影响其中的一个表。  (2)若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。  (3)若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。  视图只有满足下列条件才可更新:  1、select语句在选择列表中没有聚合函数,也不包含TOP,GROUPBY,UNION(除非视图是分区视图)或DISTINCT子句。聚合函数可以用在FROM子句的子查询中,只要不修改函数返回的值。  2、select语句的选择列表中没有派生列。派生列是由任何非简单列表达式(使用函数、加法或减法运算符等)所构成的结果集列。  3、select语句中的FROM子句至少引用一个表。select语句不能只包含非表格格式的表达式(即不是从表派生出的表达式)。  4、INSERT,UPDATE和DELETE语句在引用可更新视图之前,也必须如上述条件指定的那样满足某些限制条件。只有当视图可更新,并且所编写的UPDATE或INSERT语句只修改视图的FROM子句引用的一个基表中的数据时,UPDATE和INSERT语句才能引用视图。  只有当视图在其FROM子句中只引用一个表时,DELETE语句才能引用可更新的视图。
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

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

说明

0/200

提交
取消