浅谈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、视图利于权限控制: 有助于数据库对权限进行管理.