「前言」文章内容大致是MySQL事务管理。
「归属专栏」MySQL
「主页链接」个人主页
「笔者」枫叶先生(fy)
目录
- 视图
- 1.1 视图概念
- 1.2 创建视图
- 1.3 修改互相影响
- 1.4 删除视图
- 1.5 视图规则和限制
视图
1.1 视图概念
- 视图是一个虚拟表,其内容由查询定义
- 同真实的表一样,视图包含一系列带有名称的列和行数据
- 视图的数据变化会影响到基表(原始的表),基表的数据变化也会影响到视图
注意:这里的视图与上一篇的Read View
没有任何关系
1.2 创建视图
准备测试表,雇员信息表
假设要查询每个员工及其对应的部门名称时,需要使用员工表和部门表进行多表查询,并筛选出员工的部门号等于部门的部门号的记录
select ename, dname from emp,dept where emp.deptno=dept.deptno;
如果该查询结果会被频繁用到,那我们就可以给上述查询结果创建视图
创建视图语法如下:
create view 视图名 as select语句;
注:创建视图时会先执行select语句,然后用查询得到的结果来创建视图
例如,给上面的表创建视图
create view myview as select ename, dname from emp,dept where emp.deptno=dept.deptno;
也是通过show命令查看该表
视图创建,在数据库对应的目录下,会增加一个对应的xxx.frm
文件,但并没有与之对应的xxx.ibd
文件,这也证明了视图和基表使用的是同一份数据
查询视图
1.3 修改互相影响
修改基表影响视图
在emp表修改名为“CLARK”的名字,改为小写“clark”
修改后再查询视图,发现视图里面的内容也跟着修改了
修改视图影响基表
在视图里面修改名为“SIMTH”的名字,改为小写“smith”
再查询emp表,发现内容也跟着被修改了
上述实验说明视图与基表共用一份相同的数据
1.4 删除视图
删除视图语法如下:
drop view 视图名;
比如将刚才创建的视图删除后,在数据库中就看不到这个视图了
1.5 视图规则和限制
- 与普通表一样,视图的命名也必须是唯一的,不能出现同名视图或表名
- 创建视图的数目无限制,但要考虑复杂查询创建为视图之后的性能影响
- 视图不能添加索引,也不能有关联的触发器或者默认值
- 视图可以提高安全性,在访问视图时必须具有足够的访问权限
- 创建视图时可以使用
order by
子句,但如果从该视图检索数据时也含有order by
子句,那么该视图中的order by
将被覆盖 - 视图可以和普通表一起使用,比如进行多表查询,内外连接等
以上就是视图的内容,简单了解即可
--------------------- END ----------------------
「 作者 」 枫叶先生
「 更新 」 2023.9.11
「 声明 」 余之才疏学浅,故所撰文疏漏难免,或有谬误或不准确之处,敬请读者批评指正。