一、视图的基本概念
作为常用的数据库对象,视图(view)为数据查询提供了一条捷径,视图是一个虚拟表,其内容由查询定义
, 即视图中的数据并不像表、索引那样需要占用存储空间,视图中保存的仅仅是一条select语句,其数据源来自于数据库表或者其他视图。它同真实的表一样,视图包含一系列带有名称的列和行数据,但是视图并不在数据库中以存储的数据结构形式存在,行和列数据来自于定义视图的查询所引用的表,并且在引用视图时动态生成,当基本表发生变化时,视图也会发生变化。
视图是存储在数据库中的查询SQL语句
,使用它主要有两种原因:
一是安全原因, 视图可以隐藏一些数据。
例如,学生表可以用视图只显示学号、姓名、性别、班级信息,而不显示电话和家庭住址等信息;
二是可使复杂的查询易于理解和使用。
二、视图的优点
对于所引用的基础表来说,视图的作用类似于筛选,定义视图的筛选可以来自当前或其他数据库的一个或者多个表或者其他视图。通过视图进行查询没有任何限制,通过他们进行数据修改时的限制也很少,视图的优势主要体现在以下几方面:
(1)
增强数据安全性
:同一个数据库表可以创建不同的视图,为不同的用户分配不同的视图可以实现不同的用户只能查询或修改与之对应的数据,继而增强了数据的安全访问控制。
(2)
提高灵活性,操作变简单
:有灵活性的功能需求之后,需要改动表的结构而导致工作量比较大,这时可以虚拟表的形式达到少修改的效果。例如,因为某种需求要将a表与b表进行合并形成一个新的c表,最后,a表与b表都不会存在,而由于原来程序中编写SQL分别是基于a表与b表查询的,这意味着需要重新编写大量的SQL语句(改成向c表去操作数据),而通过视图就可以做到不修改,只需定义两个视图名字还是原来的表名a和b,而a、b视图完成从c表中取出的内容。使用视图可以简化数据查询操作,对于经常使用但结构复杂的select语句,建议将其封装为一个视图。
(3)
提高数据的逻辑独立性
:如果没有视图,应用程序一定是建立在数据库表上的,有了视图之后,应用程序就可以建立在视图上,从而使应用程序和数据库表结构在一定程度上实现逻辑分离。视图在以下两个方面使应用程序与数据逻辑独立:1>使用视图可以向应用程序屏蔽表结构,此时即便表结构发生变化(例如,表的字段名发生变化),只需要重新定义定义视图或者修改视图的定义,无需修改应用程序即可使用应用程序正常运行。2>使用视图可以向数据库表屏蔽应用程序,此时即便应用程序发生变化,只需要重新定义或者修改视图的定义,无需修改数据库表结构即可使应用程序正常运行。
使用场景:
场景1:我们希望某些查询语句只能查看到某个表中的一部分数据,就可以使用视图
场景2:简化sql语句的编写
三、视图的使用方法
1、创建视图
创建视图需要有create view的权限
,同时应该具有查询涉及的列的select权限。在MySQL数据库下的user表中保存这些权限信息,可以使用select语句查询。
语法格式为:
create [or replace] view view_name
As select_statement
[with|cascaded|local|check option]
# 语法
create [or replace] view view_name as 查询语句
or replace 如果视图已经存在了,就替换里面的查询语句
# 使用:
测试数据
create table salarys(
id int primary key auto_increment,
name char(10),
money float
) charset utf8;
insert into salarys values(null,"张三丰",500000),(null,"张无忌",40000);
# 第一种使用方式: 只能查看一部分数据(隔离数据)
mysql> create view zwj_view as select money from salarys where name=