浅谈MySQL视图的作用

视图: view, 是一种不存在的虚拟表: 类似表但是不是表

  • 类似表: 视图有表结构
  • 不是表: 没有数据, 视图的数据来源都是基表

视图根据基表的数量分为两种

单表视图: 基表只有一个

多表视图: 基表至少两个以上

执行了视图的创建语句之后: 到底发生了什么?

1、会在对应的数据库的表空间中产生一个视图(表)
2、会在数据库对应存储文件夹下产生一个结构文件

一、查看视图

视图是虚拟表: 有类似的表结构: 凡是表的查看结构所能用的都可以用在视图上面

像表一样查看: show tables;

查看视图结构: desc 视图名字;

查看创建语句

还可以使用view关键字

二、修改视图

视图的修改与创建类似: 视图结构是从其他表获取过来: 修改的是视图的获取方式.
alter view 视图名 as 新的select语句;

三、删除视图

drop view 视图名字;

删除视图发生了什么?

1、数据库没有视图结构
2、数据库文件夹下也不存在对应的视图结构文件

四、使用视图

视图的使用: 与表一样的使用(主要用于查询数据)

视图自身没有数据: 所有的数据来源都是基于原视图内部的查询语句.

五、视图数据操作

通过视图进行数据的写操作(增删改)

多表视图(基表来源两个以上)不能插入数据, 也不能删除数据: 但是可以修改数据

插入数据

删除数据

修改数据: 本身就是对基表进行操作

单表视图操作: 可以进行增删改, 但是要实现新增: 前提是视图必须包含基表的所有不能为空的字段

插入数据: 视图包含所有基表不为空的字段

插入数据: 视图不包含全部的基表不为空的字段

几乎不可能通过视图对表进行数据新增操作

视图更新限制: with check option
当视图原本可以查看到的数据,在经过视图修改的时候,如果修改之后,视图不能查出来: 更新失败

视图修改: 效果验证

六、视图算法

理论上: 每一个视图都有算法

视图算法有三种:

  • undefined: 未定义的,默认的: 但是该算法不是真正算法: 真正的执行算法只有temptable和merge: undefined是指交给系统自动选择(系统优先选择merge: 效率高)
  • temptable: 临时表,表示视图对应的select语句单独执行(先)
  • merge: 合并算法: 表示视图的对应的select语句不是单独执行, 而是与外部的select语句先进行合并, 后进行执行.

视图: create view v1 as select语句;
查询视图: select * from v1; -- select * from (select 语句) 别名;

需求: 求出每个班年龄最大的一个学生.

大部分的时候都会使用视图的默认算法: 但是如果涉及到视图与外部的select语句中有些五子句的关系顺序的时候: 一般使用temptable

七、视图意义

1、视图可以将复杂的SQL查询语句进行了封装: 简化了SQL语句: 从而提升了带宽的使用效率和网络间的传输效率

2、视图的存在: 主要是为了对外提供数据支持(外部系统)

  • 隐藏基表字段(隐私)
  • 保证了数据库的数据安全(保护数据库内部的数据结构)
  • 可以灵活的控制对外的数据: 保证针对每个接口都有一个单独的数据支持: 增强了用户友好性.

3、视图利于权限控制: 有助于数据库对权限进行管理.

posted @ 2016-02-16 11:30  chenjiacheng  阅读(1609)  评论(0编辑  收藏  举报