文章目录
- 🌈 一、视图的基本概念
- 🌈 二、视图的基本操作
- ⭐ 1. 创建视图
- ⭐ 2. 修改视图
- ⭐ 3. 修改基表
- ⭐ 4. 删除视图
- 🌈 三、视图的限制规则
🌈 一、视图的基本概念
- 视图是一种虚拟存在的表,将查询结果以表结构的方式保存起来,和真实的表一样,视图包含一系列带有名称的列和行数据。
- 视图中的数据并不在数据库中实际存在,其数据来自定义视图时查询所引用的表 (基表),在每次引用视图时动态生成。
- 由于视图和基表用的本质是同一份数据,因此对视图的修改会影响到基表,对基表的修改也会影响到视图。
🌈 二、视图的基本操作
- 创建一张名为 emp 的员工表:员工编号 (empno)、员工姓名 (ename)、员工职位 (job)、员工领导的编号 (mgr)、雇佣时间 (hiredate)、月薪 (sal)、奖金 (comm)、部门编号 (deptno)。
- 创建一张名为 dept 的部门表:部门编号 (deptno)、部门名称 (dname)、部门所在地 (loc)。
⭐ 1. 创建视图
create [or replace] view 视图名称 [列名列表] as select 语句 [with [cascaded / local] check option]
查询每个员工及其所在的部门名称
- 可以对员工表和部门表进行多表查询,并筛选出员工表的 deptno 等于部门表的 deptno 的记录。
- 如果需要经常用到该操作,就可以对该查询结果建立一张视图。
- 创建好之后再查询该视图内的数据,就可以直接看到每名员工及其对应的部门名了。
⭐ 2. 修改视图
update 视图名 set 变更的内容 where 条件; // 视图也属于表的一种,修改方式和修改表一样
- 修改视图会影响基表
举个栗子
- 查询 emp 员工表,员工 CLARK 所在的部门编号 deptno 为 10 号部门。
- 查询 dept 部门表,10 号部门的部门名 dname 为 ACCOUNTING。
- 在 v_ename_dname 视图中将 ACCOUNTING 这个部门的名字修改成 HR。
- 会发现 v_ename_dname 中所有属于该部门的员工的部门名都变了,在 dept 表中,该部门的名字也变了。
- 因为视图和基表使用的是同一份数据。
⭐ 3. 修改基表
- 修改基表会影响视图
举个栗子
- 将 emp 员工表中 JAMES 的部门编号改为 10 号部门。
- 查看 v_ename_dname 视图会发现 JAMES 的部门名变成了 10 号部门的部门名 HR。
⭐ 4. 删除视图
drop view [if exists] 视图名称1 [, 视图名称n] ... ;
- 由于视图是通过对基表的查询构建的虚拟表结构,因此删除视图并不会影响到基表。
举个栗子
- 将 v_ename_dname 这个视图删掉,再用 show 命令就查不到这张虚拟表了。
- 再查 emp 表和 dept 表,会发现这两张表对应的内容依然存在。
🌈 三、视图的限制规则
- 和表名一样,同一数据库下每张视图的名字必须唯一,不能出现同名的视图或表。
- 不限制创建的视图的数量,但需要考虑到将复杂的查询创建为视图之后的性能影响。
- 视图不能添加索引,也不能由关联的触发器或者默认值。
- 视图可以提高安全性,在访问视图时必须具有足够的访问权限。
- 可以使用 order by 子句创建视图,但如果从该视图检索数据时也含由 order by 子句,那么该视图中的 ordey by 将被覆盖。
值。 - 视图可以提高安全性,在访问视图时必须具有足够的访问权限。
- 可以使用 order by 子句创建视图,但如果从该视图检索数据时也含由 order by 子句,那么该视图中的 ordey by 将被覆盖。
- 视图可以和表一样使用。