Mysql更新视图限制
老司机直接上路了.
前提:
基本关系如果改变,必须立即反映到设计的视图上
但是通过视图去更新则必须注意以下条件:
1、如果视图有一个基本关系的简单查询生成,而且它还包含了基本关系中的主关键字或是候选关键字,则可以通过这个视图进行更新操作。
2、不允许对涉及到多个基本关系的视图进行更新。
3、如果视图的生成中涉及到聚集或是分组操作,则不允许通过这个视图进行更新。
ISO标准给出的视图的可更新充要条件为:
1、没有指定DISTINCT,即重复元组未从查询结果中消除;
2、定义查询的SELECT列表中的每个元素均为列名(而不是常量,表达式或聚合函数),且列名出现不能多于一次;
3、FROM子句只能指定一个表,即视图必须有一个源表且用户有请求该表的权限。如果源表本身就是一个视图,那么视图必须满足这些条件。因此,排除了基于连接、并(UNION)、交(INTERSECT)或差(EXCEPT)操作的所有视图;
4、where子句不能包含任何引用了FROM子句的表的嵌套SELECT操作。
5、定义查询不能有GROUP BY或HAVING子句。