【MySQL 13】视图 (带思维导图)

🌈 一、视图的基本概念

  • 视图是一种虚拟存在的表,将查询结果以表结构的方式保存起来,和真实的表一样,视图包含一系列带有名称的列和行数据。
  • 视图中的数据并不在数据库中实际存在,其数据来自定义视图时查询所引用的表 (基表),在每次引用视图时动态生成。
  • 由于视图和基表用的本质是同一份数据,因此对视图的修改会影响到基表,对基表的修改也会影响到视图。

🌈 二、视图的基本操作

  • 创建一张名为 emp 的员工表:员工编号 (empno)、员工姓名 (ename)、员工职位 (job)、员工领导的编号 (mgr)、雇佣时间 (hiredate)、月薪 (sal)、奖金 (comm)、部门编号 (deptno)。

image-20240824201528652

  • 创建一张名为 dept 的部门表:部门编号 (deptno)、部门名称 (dname)、部门所在地 (loc)。

image-20240824201600033

⭐ 1. 创建视图

create [or replace] view 视图名称 [列名列表] as select 语句 [with [cascaded / local] check option]

查询每个员工及其所在的部门名称

  • 可以对员工表和部门表进行多表查询,并筛选出员工表的 deptno 等于部门表的 deptno 的记录。

image-20240824202159080

  • 如果需要经常用到该操作,就可以对该查询结果建立一张视图。

image-20240824202444667

  • 创建好之后再查询该视图内的数据,就可以直接看到每名员工及其对应的部门名了。

image-20240824202611458

⭐ 2. 修改视图

update 视图名 set 变更的内容 where 条件;	// 视图也属于表的一种,修改方式和修改表一样
  • 修改视图会影响基表

举个栗子

  • 查询 emp 员工表,员工 CLARK 所在的部门编号 deptno 为 10 号部门。

image-20240824203111097

  • 查询 dept 部门表,10 号部门的部门名 dname 为 ACCOUNTING。

image-20240824203324055

  • 在 v_ename_dname 视图中将 ACCOUNTING 这个部门的名字修改成 HR。

image-20240824204113695

  • 会发现 v_ename_dname 中所有属于该部门的员工的部门名都变了,在 dept 表中,该部门的名字也变了。
    • 因为视图和基表使用的是同一份数据

image-20240824204317961

image-20240824204406100

⭐ 3. 修改基表

  • 修改基表会影响视图

举个栗子

  • 将 emp 员工表中 JAMES 的部门编号改为 10 号部门。

image-20240824204835987

  • 查看 v_ename_dname 视图会发现 JAMES 的部门名变成了 10 号部门的部门名 HR。

image-20240824205045509

⭐ 4. 删除视图

drop view [if exists] 视图名称1 [, 视图名称n] ... ;
  • 由于视图是通过对基表的查询构建的虚拟表结构,因此删除视图并不会影响到基表。

举个栗子

  • 将 v_ename_dname 这个视图删掉,再用 show 命令就查不到这张虚拟表了。

image-20240824205439491

  • 再查 emp 表和 dept 表,会发现这两张表对应的内容依然存在。

image-20240824205535859

image-20240824205601829

🌈 三、视图的限制规则

  • 和表名一样,同一数据库下每张视图的名字必须唯一,不能出现同名的视图或表。
  • 不限制创建的视图的数量,但需要考虑到将复杂的查询创建为视图之后的性能影响。
  • 视图不能添加索引,也不能由关联的触发器或者默认值。
  • 视图可以提高安全性,在访问视图时必须具有足够的访问权限。
  • 可以使用 order by 子句创建视图,但如果从该视图检索数据时也含由 order by 子句,那么该视图中的 ordey by 将被覆盖。
    值。
  • 视图可以提高安全性,在访问视图时必须具有足够的访问权限。
  • 可以使用 order by 子句创建视图,但如果从该视图检索数据时也含由 order by 子句,那么该视图中的 ordey by 将被覆盖。
  • 视图可以和表一样使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值