MySQL基础——视图

视图的基本原理

需求

emp表的列信息很多,有些信息是个人重要信息(比如sal、comm、mgr、hiredate),如果我们希望某个用户只能查询 emp 表的(empno、ename、 job、deptno)信息,有什么办法? => 视图

在这里插入图片描述

基本概念

  1. 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含列,其数据来自对应的真实表(基表)
  2. 对视图的总结
    1.视图是根据基表 (可以是多个基表) 来创建的,视图是虚拟的表
    2.视图也有列,视图不会创建新的数据,其数据都是来自基表
    3.通过视图可以修改基表的数据
    4.基表的改变,也会影响到视图的数据

视图使用细节

视图的基本使用

  1. create view视图名as select语句
  2. alter view视图名as select语句 ----- 更新成新的视图
  3. show create view 视图名
  4. drop view视图名1,视图名2

创建一个视图 emp_view01,只能查询 emp 表的 (empno、ename、job和deptno) 信息



-- 视图
-- 创建一个视图 emp_view01,只能查询 emp 表的 `(empno、ename、job和deptno)` 信息
-- 创建视图
create view emp_view01 as select empno, ename, job, deptno from emp;
-- 查看视图
desc emp_view01;
select * from emp_view01;
select empno, ename from emp_view01;

-- 修改成新视图
alter view emp_view01 as select empno, ename from emp;
desc emp_view01;
select * from emp_view01;

-- 查看创建视图的指令
show create view emp_view01;
-- 删除视图
drop view emp_view01;


细节

  1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式:视图名.frm)
  2. 视图的数据变化会影响到基表,基表的数据变化也会影响到视图
  3. 视图中可以再使用视图


-- 细节
-- 1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式:视图名.frm)
-- 2. 视图的数据变化会影响到基表,基表的数据变化也会影响到视图
-- 修改视图,然后查询基表 emp,然后查询 视图
update emp_view01 set job = 'MANAGER' where empno = 7369;
select * from emp;
-- +-------+--------+-----------+------+------------+---------+---------+--------+
-- | empno | ename  | job       | mgr  | hiredate   | sal     | comm    | deptno |
-- +-------+--------+-----------+------+------------+---------+---------+--------+
-- |  7369 | SMITH  | MANAGER   | 7902 | 1990-12-17 |  800.00 |    NULL |     20 |
select * from emp_view01;
-- +-------+--------+-----------+--------+
-- | empno | ename  | job       | deptno |
-- +-------+--------+-----------+--------+
-- |  7369 | SMITH  | MANAGER   |     20 |

-- 修改基表,会影响到视图,查询基表 emp,然后查询 视图
update emp set job = 'CLERK' where empno = 7369;
select * from emp;
-- +-------+--------+-----------+------+------------+---------+---------+--------+
-- | empno | ename  | job       | mgr  | hiredate   | sal     | comm    | deptno |
-- +-------+--------+-----------+------+------------+---------+---------+--------+
-- |  7369 | SMITH  | CLERK     | 7902 | 1990-12-17 |  800.00 |    NULL |     20 |
select * from emp_view01;
-- +-------+--------+-----------+--------+
-- | empno | ename  | job       | deptno |
-- +-------+--------+-----------+--------+
-- |  7369 | SMITH  | CLERK     |     20 |

-- 视图中可以再使用视图
create view emp_view02 as select empno, ename from emp_view01;
select * from emp_view02;


视图应用实例

视图最佳实践

  1. 安全:一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样,用户就可以查询自己需要的字段,不能查看保密的字段。
  2. 性能:关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。这时,数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。
  3. 灵活:如果系统中有一张旧的表,这张表由于设计的问题,即将被废弃。然而,很多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到了升级数据表的目的。


-- 针对emp , dept,和salgrade张三表.创建一个视图emp_view03,可以显示雇员编号,雇员名,雇员部门名称和薪水级别【即使用 3 张表建立视图】
-- 使用三表联合查询,得到查询结果
select empno, ename, dname, grade from emp, dept, salgrade
where emp.deptno = dept.deptno and (sal between losal and hisal);
-- 将得到的结果构建成视图
create view emp_view03 as
select empno, ename, dname, grade from emp, dept, salgrade
where emp.deptno = dept.deptno and (sal between losal and hisal);
desc emp_view03;
-- +-------+--------------------+------+-----+---------+-------+
-- | Field | Type               | Null | Key | Default | Extra |
-- +-------+--------------------+------+-----+---------+-------+
-- | empno | mediumint unsigned | NO   |     | 0       |       |
-- | ename | varchar(20)        | NO   |     |         |       |
-- | dname | varchar(20)        | NO   |     |         |       |
-- | grade | mediumint unsigned | NO   |     | 0       |       |
-- +-------+--------------------+------+-----+---------+-------+
select * from emp_view03;
-- +-------+--------+------------+-------+
-- | empno | ename  | dname      | grade |
-- +-------+--------+------------+-------+
-- |  7900 | JAMES  | SALES      |     1 |
-- |  7369 | SMITH  | RESEARCH   |     1 |
-- |  7934 | MILLER | ACCOUNTING |     2 |
-- |  7654 | MARTIN | SALES      |     2 |
-- |  7521 | WARD   | SALES      |     2 |
-- |  7844 | TURNER | SALES      |     3 |
-- |  7499 | ALLEN  | SALES      |     3 |
-- |  7902 | FORD   | RESEARCH   |     4 |
-- |  7788 | SCOTT  | RESEARCH   |     4 |
-- |  7782 | CLARK  | ACCOUNTING |     4 |
-- |  7698 | BLAKE  | SALES      |     4 |
-- |  7566 | JONES  | RESEARCH   |     4 |
-- |  7839 | KING   | ACCOUNTING |     5 |
-- +-------+--------+------------+-------+


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值