Mysql教程

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.提高表的逻辑独立性

视图可以屏蔽原有表结构变化带来的影响。例如,原有表增加列和删除未被引用的列, 对视图不会造成影响。同样,如果修改了表中的某些列,可以使用修改视图来解决这些列带来的影响。


关注微信获取最新动态