技术学习|CDA level I 数据库学习(视图)

视图是存储在数据库中的虚拟表,视图本身并不保存表中的任何数据,而是在其内部封装了查询语句,通过调用该查询语句从数据库中对应的一个或多个底层基本表中获得相应的查询结果数据并进行展示。

从本质上来讲,视图是对底层基本表的一个映射,故视图的结构和底层基本表相同,是由行和列构成的二维表。对视图的操作与对表的操作相同,可以使用SQL语句对其进行增删改操作,其基本语法是一致的。因为视图中的数据依赖于底层基本表中的数据,因此对视图进行增删改操作,实际上是对底层基本表的数据进行增删改操作。表中数据发生改变,显示在视图中的数据也会发生改变。

一、视图的作用

与直接从表读取数据相比,视图的作用主要是减少代码的重写,或增加代码的重复利用。视图可以根据分析流程,将复杂的业务逻辑抽象成查询语句并进行封装,分析人员在使用视图时不需要关心表的结构、连接关系、筛选条件、分组和排序等,只需要对视图进行简单的查询,即可获得分析所需的数据,可以有效降低查询代码的复杂度。

视图拥有更高的安全性。在创建视图时,数据库管理操作人员可以筛选掉一些不希望外部用户看到的行和列,也可以给视图设置访问权限,让不同级别的外部用户看到不同的视图,从而确保外部用户仅能获得与需求相关的数据,避免外部用户的操作对存放公司实时的业务数据的表单产生负面影响,从而提高数据库的数据安全性。

视图的每次查询或者更新都是调用查询语句对底层基本表进行查询,因此操作视图会比直接操作底层基本表要慢,在大型表上创建视图或者创建嵌套视图都会为数据库带来性能损耗;对视图内部数据的修改会导致其底层基本表的修改,此操作会带来较大的风险,且修改视图这个操作本身就拥有极大的限制(比如在视图本身的数据其实是映射了底层基本表中多条数据或者多个表的前提下,数据库无法判断修改视图要修改哪条对应的数据,导致视图无法修改,常见情况有去重、聚合函数的使用等);底层基本表的约束效力大于视图的修改效率,如果该数据的底层基本表包含非空约束的字段且具有非空约束的字段未出现在视图定义中,就无法针对视图插入数据,因为违背了非空约束的要求。

二、创建视图

create view <视图名> as ;
--创建一个名为job_minsal_view,用来查看不同职位的最低工资及从事该工作的员工姓名和职位的视图
create view job_minsal_view as
(select ename,t.job,最低工资 from
(select job,min(sal) 最低工资 from emp group by job)t
left join emp on t.job=emp.job where sal=最低工资);

三、修改视图

修改视图不是修改图中的数据,而是修改数据库中已存在的表的定义。在数据库中,因为业务发生变化,可能会导致视图查询所对应的底层基本表的某些字段也发生改变,此时可以通过修改视图来保持视图和底层基本表之间一致。

create [or replace or alter] view <视图名> as ;
--修改视图job_minsal_view,为了避免重名情况增加员工编码作为查询结果
alter view job_minsal_view as
select empno,ename,t.job,最低工资 from
(select job,min(sal) 最低工资 from emp group by job) t
left join emp on t.job=emp.job where sal=最低工资;

四、删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只是删除视图的定义,而不会删除底层基本表中的数据,即底层基本表中的数据不会被删除。

drop view [if exists] <视图名>

你可能感兴趣的:(CDA数据分析,数据库,mysql,数据分析,sql)