mysql这就是视图

  时间:2020-07-10 22:07:19  阅读量:495  评论数:0  作者:二郎银

针对mysql这就是视图这个问题,很多小白还是比较困扰,现在这篇文章举例源码做了详细说明,还不懂的朋友可以了解一下。

本文介绍什么是视图,视图怎样工作, 什么情况使用视图,以及视图注意事项。

视图是什么 ?

视图是一张虚拟的表 ,视图只包查询的数据,并不是真实存在的表,只是为了方便创造的工具。
现有一个学生表如下 :

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   |
 ------- -------- ------- --------------------- --------- 

什么情况使用视图

从上述的例子中可以看出,视图其实就是一个子查询, 但是可能需要反复用它,就把它存下来,称为视图。那么也不难理解下面的视图主要应用场景

  1. 需要多次用到的查询用视图代替,不用反复查询 。
  2. 只使用表的一部分而不是全部表。 (比如现在业务只要考虑95033 班级的同学,可以创建一个包含95033班同学的视图,而不用每次都查询整个学生表)
  3. 保护数据, 可以使得用户只有访问部分数据的权限,而不是整个表。(比如学生的出生日期是保密信息,在研究时可以创建一个不包含出生日期的视图)
  4. 更该数据格式和表示方法 。视图可以返回与底层表的表示和格式不同的数据 。
    比如我需要用中文字段来表示学生表
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 语句的层次, 可以用来重新格式化数据,保护数据,正确使用视图可以简化的、高效的查询。

关键词:sql,mysql,数据库,就是,视图