一、视图(view)
是一种结构(有行有列)但是没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义的,而是从对应的基表中产生。
1.创建视图
create view 视图名 as select 语句;
select语句可以是普通查询,连接查询,联合查询,子查询。
(1)创建单表视图
(2)创建多表视图
2.查看视图
查看试图:查看视图结构
- show tables;
- desc 视图名;
- show create table 视图名;
3.使用视图
使用视图主要是为了查询。将视图当作表一样查询即可。
视图的执行:其实本质就是执行封装的select语句。
4.修改视图
视图本身不可修改,但是视图的来源可以修改
修改视图修改视图:修改视图本身的来源语句(select语句)
alter view 视图名 as 新的 select 语句;
5.删除视图
删除视图drop view 视图名;
6.视图意义
- 视图可以节省sql语句:将一条复杂的查询语句使用视图进行保存,之后可以直接对视图进行操作。
- 数据安全:视图操作主要针对查询,如果对视图结构进行处理(删除),不会影响基表数据(相对安全)
- 视图往往是在大系统中使用,而且是多系统使用。对外提供有效数据,隐藏关键的数据。
- 视图可以更好的进行权限控制
二、视图数据操作
1.新增数据
视图新增就是直接对视图进行数据新增
- 多表视图不能新增数据
- 单表视图可以插入数据。但是视图中包含的字段必须有基表中所有不能为空(或者没有默认值)字段。
- 视图是可以向基表插入数据的
2.删除数据
- 多表视图不能删除数据
- 单表视图删除数据
3.更新数据
- 多表视图更新数据
- 更新限制(with check option)
如果对视图在新增的时候,限定了某个字段有限制:那么在对视图进行数据更新的操作时,系统会验证——保证更新后,数据依然可以被实体查出来,否则不让更新。
三、视图算法
视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。
当查询信息时遇到了相同的信息,系统会自动选其中一个(看图3.1)
当这种情况发生如何解决?
因此就有了视图算法
视图算法
- undefined:未定义(默认的),这不是一种实际算法,只是用来告诉系统视图没有定义算法,系统自己定义。
- temptable:临时表算法。系统先执行视图的select语句,后执行外部查询语句
- merge:合并算法。系统先将视图对应的select语句与外部的视图查询语句的select语句进行合并,然后执行(效率高)
算法指定:在创建视图的时候
create algorithm = 制定算法 view 视图名 as select 语句;
视图算法选择
如果视图的select语句中包含一个查询子句(where,group by,order by,having,limit)而且很有可能顺序比外部的查询语句要靠后,使用算法temptable,其他情况可以不用指定(默认即可)。
网友评论