8.1视图简介
视图由数据库中的一个表或多个表导出的虚拟表。其作用是方便用户对数据的操作。本节将详细讲解视图的含义及作用。
8.1.1视图的含义
视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表。视图还可以从已经 存在的视图的基础上定义。数据库中只存放了视图的定义,而并没有存放视图中的数据。 这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应 的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变, 显示在视图中的数据也会发生改变。下面用一个例子来具体讲解视图的含义。
【示例8-1】下面一个公司的数据库中有一张公司部门表department。表中包括部门号(d_id)、部门名称(d_name)、功能(function)和办公地址(address)。department 表结构如下:
mysql> DESC department; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | d_id | int(4) | NO | PRI | NULL | | | d_name | varchar(20) | NO | UNI | NULL | | | function | varchar(50) | YES | | NULL | | | address | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.15 sec)
还有一张员工表worker。表中包含了员工的工作号(num)、部门号(d_id)、姓名(name)、性別(sex)、出生日期(birthday)和家庭住址(homeaddress)构如下:
mysql> desc worker; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | num | int(10) | NO | PRI | NULL | | | d_id | int(4) | YES | MUL | NULL | | | name | varchar(20) | NO | | NULL | | | sex | varchar(4) | NO | | NULL | | | birthday | datetime | YES | | NULL | | | homeaddress | varchar(50) | YES | | NULL | | +-------------+-------------+------+-----+---------+-------+ 6 rows in set (0.02 sec)
由于各部门的领导的权力范围不同。因此,各部门的领导只能看到该部门的员工的信息。而且,领导可能不关心员工的生日和家庭住址。为了达到这个目的,可以为各部门的 领导建立一个视图。通过该视图,领导只能看到本部门的员工的指定信息。
例如,为生产部门建立一个名为product_view的视图。通过视图product_view,生产部门的领导只能看到生产部门员工的工作号、姓名和性别等信息。这些department表的信息和worker表的信息依然存在于各自的表中,而视图product_view中不保存任何数据信息。当department表和worker表的信息发生改变时,视图product_view展示的信息也发生相应的变化。
技巧:如果经常需要从多个表查询指定字段的数据,可以在这些表上建立一个视图。通 过这个视图显示这些字段的数据。如果表中修改了与视图相关的字段的名称,可 以通过修改视图来解决可能引起的问题。
MySQL的视图不支持输入参数的功能,因此交互性上还有欠缺。但对于变化不是很大的操作,使用视图可以很大程度上简化用户的操作。
8.1.2 视图的作用
视图是在原有的表或者视图的基础上重新定义的虚拟表,这可以从原有的表上选取对 用户有用的信息。那些对用户没有用,或者用户没有权限了解的信息,都可以直接屏蔽掉。 这样做既使应用简单化,也保证了系统的安全。视图起着类似于筛选的作用。视图的作用 归纳为如下几点:
1.使操作简单化
视图需要达到的目的就是所见即所需。也就是说,从视图看到的信息就是所需要了解 的信息。视图可以简化对数据的操作。例如,可以为经常使用的查询定义一个视图,使用 户不必为同样的查询操作指定条件。这样可以很大程度上方便用户的操作。
2.增加数据的安全性
通过视图,用户只能查询和修改指定的数据。指定数据以外的信息,用户根本接触不到。数据库授权命令可以限制用户的操作权限,但不能限制到特定行和列上。使用视图后, 可以简单方便地将用户的权限限制到特定的行和列上。这样可以保证敏感信息不会被没有 权限的人看到,可以保证一些机密信息的安全。
3.提高表的逻辑独立性
视图可以屏蔽原有表结构变化带来的影响。例如,原有表增加列和删除未被引用的列, 对视图不会造成影响。同样,如果修改了表中的某些列,可以使用修改视图来解决这些列带来的影响。