本文介绍什么是视图,视图怎样工作, 什么情况使用视图,以及视图注意事项。
视图是什么 ?
视图是一张虚拟的表 ,视图只包查询的数据,并不是真实存在的表,只是为了方便创造的工具。
现有一个学生表如下 :
mysql> select * from students;
+-------+--------+-------+---------------------+---------+
| s_num | s_name | s_sex | s_birthday | s_class |
+-------+--------+-------+---------------------+---------+
| 101 | 曾华 | 男 | 1977-09-01 00:00:00 | 95033 |
| 102 | 匡明 | 男 | 1975-10-02 00:00:00 | 95031 |
| 103 | 王丽 | 女 | 1976-01-23 00:00:00 | 95033 |
| 104 | 李军 | 男 | 1976-02-20 00:00:00 | 95033 |
| 105 | 王芳 | 女 | 1975-02-10 00:00:00 | 95031 |
| 106 | 陆军 | 男 | 1974-06-03 00:00:00 | 95031 |
| 107 | 王尼玛 | 男 | 1976-02-20 00:00:00 | 95033 |
| 108 | 张全蛋 | 男 | 1975-02-10 00:00:00 | 95031 |
| 109 | 赵铁柱 | 男 | 1974-06-03 00:00:00 | 95031 |
+-------+--------+-------+---------------------+---------+
视图怎样工作
创建视图语法 : create view 视图名称 as + select 语句
创建一个只包含男同学的虚拟表(视图) ,
mysql> create view male_students as select * from students where s_sex = '男' ;
Query OK, 0 rows affected (0.06 sec)
视图可以当成表一样查询,排序
mysql> select * from male_students;
+-------+--------+-------+---------------------+---------+
| s_num | s_name | s_sex | s_birthday | s_class |
+-------+--------+-------+---------------------+---------+
| 101 | 曾华 | 男 | 1977-09-01 00:00:00 | 95033 |
| 102 | 匡明 | 男 | 1975-10-02 00:00:00 | 95031 |
| 104 | 李军 | 男 | 1976-02-20 00:00:00 | 95033 |
| 106 | 陆军 | 男 | 1974-06-03 00:00:00 | 95031 |
| 107 | 王尼玛 | 男 | 1976-02-20 00:00:00 | 95033 |
| 108 | 张全蛋 | 男 | 1975-02-10 00:00:00 | 95031 |
| 109 | 赵铁柱 | 男 | 1974-06-03 00:00:00 | 95031 |
+-------+--------+-------+---------------------+---------+
什么情况使用视图
从上述的例子中可以看出,视图其实就是一个子查询, 但是可能需要反复用它,就把它存下来,称为视图。那么也不难理解下面的视图主要应用场景
- 需要多次用到的查询用视图代替,不用反复查询 。
- 只使用表的一部分而不是全部表。 (比如现在业务只要考虑95033 班级的同学,可以创建一个包含95033班同学的视图,而不用每次都查询整个学生表)
- 保护数据, 可以使得用户只有访问部分数据的权限,而不是整个表。(比如学生的出生日期是保密信息,在研究时可以创建一个不包含出生日期的视图)
- 更该数据格式和表示方法 。视图可以返回与底层表的表示和格式不同的数据 。
比如我需要用中文字段来表示学生表
mysql> create view newstudents as select s_num as '学号' , s_name as '姓名' , s_sex as '性别' from students;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from newstudents;
+------+--------+------+
| 学号 | 姓名 | 性别 |
+------+--------+------+
| 101 | 曾华 | 男 |
| 102 | 匡明 | 男 |
| 103 | 王丽 | 女 |
| 104 | 李军 | 男 |
| 105 | 王芳 | 女 |
| 106 | 陆军 | 男 |
| 107 | 王尼玛 | 男 |
| 108 | 张全蛋 | 男 |
| 109 | 赵铁柱 | 男 |
+------+--------+------+
9 rows in set (0.00 sec)
这样对视图查询结果都是中文了,而不要修改原表字段名称,也不需要每次都使用别名
使用视图的注意事项
- 视图名称不可与其他视图或者表重复 (显然,重复就会混淆)
- 视图的数目是没有限制的
- 视图可以嵌套,可以查询视图来构造视图
- 视图不支持索引和触发器
总结: 视图提供了一种封装select 语句的层次, 可以用来重新格式化数据,保护数据,正确使用视图可以简化的、高效的查询。
感谢您在茫茫的网络世界中阅读了本文, 希望没有浪费您宝贵的时间,期待您指出文中的不足!