MySQL-View视图

视图

常见的数据库对象

  • 表:表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录

  • 数据字典:就是系统表,存放数据库相关信息的表,系统表的数据通常由数据库维护,程序员通常不应该修改,只可查看

  • 约束:执行数据校验的规则,用于保证数据完整性的规则

  • 视图:一个或者多个数据表里的数据表里的数据的逻辑显示,视图并不存储数据

  • 索引:用于提高查询性能,相当于书的目录

  • 存储过程:用于完成一次完整的业务处理,没有返回值,但可以通过传出参数将多个值传给调用环境

  • 存储函数:用于完成一次特定的计算,具有一个返回值

  • 触发器:相当于一个事件监听器,当数据发生特定事件后,触发器被触发,完成相应的操作

视图概念

视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。

视图理解

  • 视图是一钟虚拟的表,本身是不具有数据的,占用很少的内存空间,它是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可以根据权限将用户对数据的访问限制在某些视图上,用户不需要查询数据表,可以直接通过视图获取数据表中信息,这一定程度上保障了数据表中数据的安全性

适应灵活多变的需求

当业务系统的需求发生变化后,如果需要改动数据表的结构,则工作量相对较大,可以使用视图来减少工作量,这种方式实际工作中使用的比较多

能够分解复杂的查询语句

数据库中如果存在复杂的查询逻辑,则可以将问题进行分解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑

视图的不足

如果实际数据表的结构变更了,我们就需要及时对相对应的视图进行维护,特别是嵌套的视图,维护复杂,可读性不好,容易变成系统潜在隐患

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值