通过上节课视图检查选项的学习,我们知道当我们对视图中的数据进行插入、更新、删除时,那么检查选项会去检查我们所操作的数据是否符合 视图定义时的条件

 

思考: 对于MySQL的视图,是任何视图都能进行增删改吗,并不是这样的,这节课就来学习关于视图的更新需要什么样的条件,也就是说符合什 么样条件的视图才可以更新呢。如下

 

视图的更新。要使视图可更新,视图中的行与基表(基础表)中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新 (1)聚合函数或窗口函数,如sum()、min()、max()、count() (2)去重,例如distinct (3)分组,例如group by (4)过滤,例如having (5)union 或者 union all

 

原则:视图中的数据必须对应基表中的一行数据

 

视图的作用

1、简单。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作 每次指定全部的条件。也就是在业务中,一些复杂的查询条件,我们不用每次在业务开发中把这些复杂的条件一条一条的写出来,我们可以把复杂的 条件定义在一个视图当中,在业务操作的时候,只需要针对视图进行操作就可以了

2、安全。数据库可以授权,但是MySQL的授权只能控制到表,如果我们需要控制表中的字段,MySQL的授权是做不到的,此时就需要使用视图。 通过视图,用户只能查询和修改他们所能见到的数据。例如只想让用户看到学生表的id和姓名,不想让用户看到学号,此时就可以创建一个视图,视图 对应的select语句就是只查询id和姓名。保证了敏感数据的安全性

3、数据独立。视图可帮助用户屏蔽真实表结构带来的影响。例如我们基础表的某个字段名发生了变化,此时就去更新视图的语句上把新的字段名写上去, 给这个新的字段名取一个原来字段别名,就可以让用户不察觉到我们的字段名变化。例如我们把基础表的name字段改为了studentname,那我们只需要在 更新视图语句下做如下操作,即可让用户不察觉到我们的字段名变化 原来的更新视图语句:create or replace view stu_v_1 as select id,name from student where id <= 15 with local check option; 修改后的更新视图语句:create or replace view stu_v_1 as select id,studentname as name from student where id <= 15 with local check option;