视图
常见的数据库对象
-
表:表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录
-
数据字典:就是系统表,存放数据库相关信息的表,系统表的数据通常由数据库维护,程序员通常不应该修改,只可查看
-
约束:执行数据校验的规则,用于保证数据完整性的规则
-
视图:一个或者多个数据表里的数据表里的数据的逻辑显示,视图并不存储数据
-
索引:用于提高查询性能,相当于书的目录
-
存储过程:用于完成一次完整的业务处理,没有返回值,但可以通过传出参数将多个值传给调用环境
-
存储函数:用于完成一次特定的计算,具有一个返回值
-
触发器:相当于一个事件监听器,当数据发生特定事件后,触发器被触发,完成相应的操作
视图概念
视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。
视图理解
-
视图是一钟虚拟的表,本身是不具有数据的,占用很少的内存空间,它是sql的一个重要概念
-
视图建立在已有表的基础之上,视图赖以建立的这些表称为基表
-
视图的创建和删除只影响视图本身,不影响对应的基表,但是当对视图中的数据进行增删改查的时候,数据表中的数据会发生相应地变化,反之亦然
-
向视图中提供数据的语句为select语句,可以将视图理解为存储起来的select语句
创建视图
create view 视图名称 as 查询语句
#利用视图进行格式化
create view 视图名 as
select concat(表名,'(',表名,')')
from 表名 join 表名 on 连接条件;
查看视图
#查看数据库的表对象和视图对象
show tables;
#查看视图结构
describe 视图名;
#查看视图的属性信息
show table status like 视图名;
#查看视图的详细信息
show create view 视图名;
删除视图与修改视图
update 视图名 set 需要修改的内容 where 条件判断;
不可更新的视图
要使视图可更新,视图中的行和底层基本表中的行之间必须存在一对一的关系,另外当视图出现如下情况时,视图不支持更新操作
-
在定义视图的时候指定“ALGORITHM=TEMPTABLE”,视图将不支持insert和delete操作
-
视图中不包含基表中所有被定义为非空又未指定默认值的列,视图将不支持insert操作
-
在定义视图的select语句中使用join联合查询,视图将不支持insert和delect操作
-
在定义视图的select语句后的字段列表中使用了数学表达式或子查询,视图将不支持insert,也不支持update使用了数学表达式,子查询的字段值
-
在定义视图的select语句后的字段列表中使用distinct,聚合函数,group by,having,union等视图将不支持insert,update,delete
-
在定义视图的select语句中包含了子查询,而子查询中引用from后面的表,视图将不支持insert,update,delete
-
视图定义基于一个不可更新视图
#修改视图
#方式一
create or replace view 视图名 as select 列表名,。。。 from 表名;
#方式二
alter view 视图名 as select 列名,列名... from 表名;
#删除视图
drop view 视图名
drop view 视图名1,视图名2...
视图总结
操作简单
将经常使用的查询操作定义为视图,可以使开发人员不需要关心视图对应的数据表的结构,表与表之间的关联关系,也不需要关心数据表之间的业务逻辑和查询条件,而只需要简单操作视图即可,极大简化了开发人员对数据库的操作
减少数据冗余
视图和实际数据表不一样,它存储的是查询语句,所以,在使用的时候,我们通过定义视图的查询语句来获取结果集,而视图本身不存储数据,不占用数据存储资源,减少了数据冗余
数据安全
MySQL用户对数据的访问限制在某些数据的结果集上,而这些数据的结果集可以使用视图来实现,用户不必直接查询或操作数据表,这也可以理解为视图具有隔离性,视图相当于用户和实际的数据表之间加了一层虚拟表,同时,MySQL可以根据权限将用户对数据的访问限制在某些视图上,用户不需要查询数据表,可以直接通过视图获取数据表中信息,这一定程度上保障了数据表中数据的安全性
适应灵活多变的需求
当业务系统的需求发生变化后,如果需要改动数据表的结构,则工作量相对较大,可以使用视图来减少工作量,这种方式实际工作中使用的比较多
能够分解复杂的查询语句
数据库中如果存在复杂的查询逻辑,则可以将问题进行分解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑
视图的不足
如果实际数据表的结构变更了,我们就需要及时对相对应的视图进行维护,特别是嵌套的视图,维护复杂,可读性不好,容易变成系统潜在隐患