MySQL的视图

前言

视图(View)是从一个表或多个表中导出的一种虚拟存在的表,对于使用视图的用户来跟使用正常的数据表一样操作。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的

需求描述:

在看MySQL的视图,对于视图的定义,进行基本的了解,在此记录下.

概念解释:

视图:存储的查询语句,当调用的时候,产生结果集,视图充当的是虚拟表的角色

测试过程:

说明:
如果要对一张表或者多张表进行查询,可以通过写复杂的SQL语句来实现
如果要这些SQL语句存储为视图,那么查询的时候,就直接查询这个视图就可以了.

一丶视图的优势

1.简化查询:使用视图的用户不需要关心视图对应的表的结构、关联条件和筛选条件,只管使用已经过滤好的复合条件的结果集就好。
2.安全作用:数据库中的权限设计,并不能限制访问某一行、某一列,通过使用视图,我们能做到让用户仅能访问他们被允许查询的记录数据
3.逻辑独立性:视图的来源表添加新列对视图没有影响;假如必须修改来源表的列名,我们可以修改视图来解决。这样我们的应用程序代码可以不做处理,正常运行

二、视图的使用场景

1.经常查询的一部分数据,抽象了有时非常复杂的查询细节
2.运营人员需要经常关注最新的推广数据,而这部分数据的获取需要关联很多张表
计算列的需要,数据库设计范式要求我们减少冗余字段,因此现在很多数据表都没有计算列字段,如采购单:有价格、数量、税率、含税金额,多半没有不含税金额、税额,而这些字段在很多报表中有都会用到,所以我们可以创建一个含有计算列字段的视图来解决这个问题
3.公司的人事系统给外包公司新增功能,但是不能暴露敏感数据,比如薪资、人事家庭地址

三、具体实例

1.创建表,插入数据,并且执行查询
mysql> CREATE TABLE t (qty INT, price INT);
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO t VALUES(3, 50), (5, 60);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM t;
+------+-------+
| qty  | price |
+------+-------+
|    3 |    50 |
|    5 |    60 |
+------+-------+
2 rows in set (0.00 sec)
2.创建视图,视图中的查询根据具体的情况有相应的表达式
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
Query OK, 0 rows affected (0.01 sec)
3.查询视图
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
|    5 |    60 |   300 |
+------+-------+-------+
2 rows in set (0.00 sec)

对于视图的查询也可以加上过滤条件:

mysql> SELECT * FROM v WHERE qty = 5;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    5 |    60 |   300 |
+------+-------+-------+
1 row in set (0.00 sec)

备注:所以仅仅查询这个视图,和执行定义语句中的SQL语句的效果相同.即就相当于查询了一张表.同时,视图也就等同于后面的查询语句,视图是存储在数据库中的,所以就理解了开头说的存储的查询.

4.查看当前库下所有的视图
mysql> show full tables where table_type like 'VIEW';
+----------------+------------+
| Tables_in_test | Table_type |
+----------------+------------+
| v              | VIEW       |
| vw_01          | VIEW       |
+----------------+------------+
2 rows in set (0.00 sec)
5.基于其他的视图来创建视图
mysql> select * from vw_01;  #vw_01是一个视图.
+---+------+
| a | b    |
+---+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
+---+------+
4 rows in set (0.00 sec)

mysql> create view v01 as select a,b from vw_01;  #基于视图来创建视图,也就是说,视图定义中的SELECT查询的是另外的视图.
Query OK, 0 rows affected (0.02 sec)

mysql> select * from v01;
+---+------+
| a | b    |
+---+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
+---+------+
4 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值