视图
一、常见的数据库对象
1.表 table 表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录
2.数据字典,就是系统表,存放数据库相关信息的表,系统表的数据通常由数据库系统维护,程序员通常不应该修改,只可查看
3.约数 constraint ,执行数据校验的规则,用于保证数据完整性的规则
4.视图 view ,一个或者多个数据表里的数据的逻辑显示,视图并不存储数据
5.索引 index 用于提高查询性能,相当于书的目录
6.存储过程 procedure 用于完成一次完整的业务处理,没有返回值,但可以通过传出参数将多个值传给调用环境
7.存储函数 function 用于完成一次特定的计算,具有一个返回值
8.触发器 trigger 相当于一个事件监听器,当数据库发生特定时间后,触发器被触发,完成相应处理
视图的理解
1.视图可以看作是一个虚拟表,本身是不存储数据的,视图的本质,就可以看作是存储起来的select语句
2.视图中select语句中涉及到的表,称为基表
3.针对视图做DML操作,会影响到对应基表中的数据,反之亦然
4.视图本身的删除,不会导致基表中数据的删除
5.视图的应用场景:针对于小型项目,不推荐使用视图,针对于大型项目,可以考虑使用视图
6.视图的优点:简化查询;控制数据的访问
创建视图:
语法: create view 视图名(可自定义) as 查询语句(针对单表或多表)
--针对单表
create view vu_emp1 as select employee_id,last_name,salary
from emps;
--查看所有年级所有学生的成绩(多表)
create view v_r_s_g_j as 查询语句
select GradeName,stuName,SubjectName,score from result r
join studengt s on r.stuId=s.stuId join grade g on s.GradeId=g.GradeId
join subject j on r.SubjectNo=j.SubjectNo;
查询数据: select * from 视图名;
确定视图中字段名的方式
1.查询语句中,字段的别名会作为视图中字段名称出现
2、在视图名后加括号,括号内字段个数,与select中字段个数相同
查看视图
1.查看数据库的表对象,视图对象
show tables;
2.查看视图的结构
desc 视图名
3.查看视图的属性信息
show table status like '视图名'
4.查看视图的详细定义信息
show create view 视图名
更新视图中的数据
1.更新视图的数据,会导致基表中数据的修改
2.同理更新表中的数据,也会导致视图中的数据的修改
3.删除视图中的数据,也会导致表中的数据的删除
修改视图
1.使用create or replace view
2.alter view 语法:alter view 视图名 as 查询语句
删除视图
1.drop view 视图名;
2.drop view 视图名1,视图名2...;
说明:基于视图a、b创建了新的视图c,如果将视图a或者视图b删除,会导致视图c的查询失败,这样的视图c需要手动删除或修改,否则影响使用
总结:
视图的优点:
简单化,数据所见即所得,开发人员不需要关心视图对应的数据表的结构,表与表之间的关联关系,也不需要关心数据表之间的业务逻辑和查询条件,而只需要简单的操作视图即可,极大简化了开发人员对数据库的操作
安全性,将用户对数据的访问限制在某些数据的结果集上,而这些数据的结果集可以使用视图来实现,用户不比直接查询或操作数据表。这也可以理解为视图具有隔离性,视图相当于在用户和实际的数据表之间加了一层虚拟表。同时,MySQL也可以根据权限将用户对数据的访问限制在某些视图上,用户不需要查询数据表,可以直接通过视图获取数据表中的信息,一定程度上保障了数据表中数据的安全性
减少数据冗余,视图跟实际数据表不一样,它存储的是查询语句。所以在使用的时候,我们需要通过定义视图的查询语句来获取结果集,而视图本身不存储数据,不占用数据存储的资源,减少了数据冗余。
适应灵活多变的需求,当业务系统的需求发生变化后,如果需要改动数据表的结构,则工作量相对较大,可以使用视图来减少改动的工作量
能够分解复杂的查询逻辑,数据库中如果存在复杂的查询逻辑,则可以将问题进行分解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑
缺点:
如果实际数据表的结构变更了,我们就需要及时对相关的视图进行相应的维护,特别是嵌套的视图,维护会变得比较复杂,可读性不好,容易变成系统的潜在隐患,创建的视图的SQL查询可能会对字段重命名,也可能包含复杂的逻辑,这些都会增加维护成本