视图

一、常见的数据库对象

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查询可能会对字段重命名,也可能包含复杂的逻辑,这些都会增加维护成本

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐