视图
视图是一种虚拟存在的表,你可以通过
create view 视图名 as (子查询);
视图的作用
1)简单:使用视图的用户不需要关心后面对应表的结构,关联,筛选条件,这是一个过滤好的符合条件的结果集。(重用子查询)
2)安全:使用一个视图的用户只能看到特定的行和列,这种权限限制是表权限管理无法做到的。(项目经理只想我们看到用户名,不想让我们看到密码,就基于用户表的查询,建立一个视图)
3)数据独立:一旦视图的结构确定,可以屏蔽表结构变化对视图的影响,原表增加列对于视图没有影响,但是修改列名,要修改视图,原表增删改数据,视图会自动更新。
视图的分类和限制
1)简单视图:创建视图的子查询不包含关联查询,查询字段不包含表达式,函数,不包含分组,没有去重。
2)复杂视图:子查询包含上述任意一条。
注:对视图的DML操作,只针对简单视图可用。
对视图的操作就是对基表的操作,操作不当就可能造成对基表的数据污染。
注:如果原表某列有约束,如果不满足约束,则不能操作。
视图的数据污染
在添加一条数据,在视图中没有显示,但是基表添加了,就是数据污染。
视图中的删除数据不会发生数据污染,其他操作都有可能发生数据污染。
如何避免数据污染
为视图添加一个检查约束,可以保证对视图的DML操作在视图中可见,否则不允许DML操作,这样就避免了对基表的数据污染。
语法:
create view 视图名 as (子查询)
with check option;