前言
本篇博客,我讲通过 三个方面讲述视图:视图的含义,视图的使用,为什么要学习视图。
其中,视图的使用,
我将会分两个方面进行分析:表的使用:也将主要是“增删改查”,这四个方面的知识;数据的使用(主要是数据的插入)。
插入成功?添加成功?
插入成功:点击运行时,运行不会报错。添加成功:你可以查看你添加的数据。
接下来,将进行本篇的学习
视图的含义
1 视图是一个抽象的表,不可以存储数据
2 视图都是基于一个表来进行操作的
问题
1 为什么说视图是一张抽象的表,应该如果理解,有没有具体的例子?
原因:视图主要依托于基表而存在的,如果没有基表,也就没有 视图。
2 视图不可以存储数据,那我们为什么要学习数据的插入呢,数据的插入,是给谁?
原因:
视图的本身,不可以存储数据的,我们添加数据是向视图的基表添加(基表:与视图相关联的表,我们称之为基表)。为什么添加数据后,当符合当前视图的条件时,会显示添加的数据?
原因:我理解是,视图相当于基表的“孩子”,基表有什么,视图可以通过一定的规则,获取全部,或部分的数据,这也就说明为什么视图本身无法插入数据,但会显示的原因。
3为什么视图是基于一张表?
原因:
视图本身并不存在,是一张抽象的表。是那种看不见摸不着的,只能依托于表而存在
重点:我们接下来对视图的操作 ,其本质是对表的操作
视图的使用
前提 基表是 employee1
1 从表的立场看
1.1 视图的创建
语法格式:create [or replace] view 视图名 as +选择 查找合适的表结构;
要求:创建一个视图,基表是employee1 ,有id,name 两个字段。 代码如下: create or replace view jj as select id,name ,money from employee1;注意:or replace 可以省略的当你运行成功之后,你的图形化界面左边,会出现 view (视图)的字样
1.2 视图的修改
注意:视图的修改,是字段层面的应用。
语法格式:create or replace view 视图名 as +选择 查找合适的表结构 where 条件;
注意:这里的 or replace 是不可以省略的。
要求:再添加一个自段 money 代码如下: create or replace view jj as select id,name,money from employee1 运行结果
1.3 视图的查看
1 查看创建视图的语句
语法格式:show create view 视图名
要求:查看创建视图的语句
代码如下
show create view jj; 运行结果
2 查看视图的数据
语法格式:select 字段列表 from 视图名;
注意:当前操作的视图,是基于之前修改后的视图。
要求:查看当前视图
代码如下
select *from jj;
运行结果
1.4 视图的删除
语法格式:drop view [ if exists ] 视图名;
要求:删除当前视图
代码如下
drop view if exists jj;运行结果
视图 jj ,删除成功!
2 从数据 的立场看
2.1 添加数据
前提:重新创建 视图 jj
代码如下
create or replace view jj as select id,name,money from employee1 where id<4;运行结果
语法格式:insert into 视图名 (字段列表) values (对应的数据值);
实例 1
要求 给字段 id,name 添加 值 3,“算数”
代码如下
insert into jj(id, name) values (3,'算数'); select *from jj;运行结果
视图 jj
基表 employee1
select *from employee1 ;
运行结果
发现,视图 jj 和 基表 employee1 查询结果是一样的。
实例 2
前提 :实例2 ,是在实例1 运行之后。
要求:要求 给字段 id,name 添加 值 30,“算数”
代码如下
insert into jj(id, name) values (30,'算数');
select *from jj;当点击运行时,是成功的,但 视图 jj 不会出现 新的一行数据。
基表 employee1
发现 基表 employee1 和 视图 jj 不一样
2.2 注意:通过以上 两个案例 发现,
1 不管怎么添加 基表都是成功的,但视图有时候却不行
2 当我们给视图插入数据时,我们点击运行 ,是不会报错的,但 我们查看视图时却没有显示
原因
1 为什么,视图不行,显示不出?
原因: 我们给视图设了where条件 ,当不满足 条件时,不会显示
2 为什么 不显示,但插入成功,不报错?
原因:我们没有添加 检测选项 (with checked option)不会检测当前视图的条件,但我们要查看当前视图时,内部会判断该条件,不满足,不会显示。
视图的作用
视图的本质 还是对表进行操作,我们可以直接操纵表,来进行一系列的操作,为什么还要提出视图这一概念?大家或多或少都有这些疑问?
原因:
为什么要使用视图?
使用视图的主要原因包括简化用户操作、定制用户数据、简化数据操作、提高数据安全性、合并分离的数据,以及提供额外的安全层和计算列定义。12
简化用户操作:视图可以帮助用户更简单地查询和操作数据。通过视图,用户可以聚焦于特定的数据,而无需编写复杂的SQL语句来关联多个表或使用聚合函数。例如,销售人员可以通过查询特定的视图获取与销售相关的数据,而不必了解底层表的复杂结构。
定制用户数据:根据不同角色的工作人员需要,可以创建专门的视图,以提供定制化的数据访问。例如,采购人员可以查看与采购相关的数据,而敏感信息如采购价格则不会显示在他们的视图中。
提高数据安全性:视图提供了一种机制来限制对特定数据的访问。由于视图是动态生成的,可以控制哪些字段或记录对用户可见。此外,通过创建只读视图,可以确保用户只能检索数据而不能更新数据,从而提供额外的安全层。
合并分离的数据:在大型组织中,可能需要合并来自不同部门或分公司的数据以便统一管理。视图可以帮助将这些分散的数据整合到一个逻辑表中,方便进行数据分析和报告。
简化复杂查询:视图可以隐藏底层表的复杂性,向最终用户和外部应用程序提供一个简化的数据模型。通过使用视图,可以减少编写复杂SQL语句的需求,从而简化复杂的查询操作。
定义计算列:虽然数据库表不应该包含计算列,但视图支持这一功能。例如,可以在订单视图中定义一个计算列来显示订单的总销售额,而无需在底层表中存储这些计算结果。
综上所述,视图在数据库管理中扮演着重要的角色,它们不仅提高了数据访问的效率和安全性,还允许数据库管理员根据用户的特定需求定制数据视图。
总而言之:视图,在我们操作时,扮演着重大的角色,极大地减轻我们的负担。
下一篇博客,我会讲述通过简述:检测选项,来对当前视图的条件进行判断,当不满足条件时,插入不成功;同时下一篇博客中,使用的递归思想,也极大的暗示了视图的作用,方面我们简化代码。