MySQL视图特性

目录

一、视图概念

二、基本使用

2.1 创建视图

2.2 修改视图影响基表

2.3 修改基表影响视图

2.4 删除视图

三、视图规则和限制


一、视图概念

  • 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据
  • 视图中的数据并不会单独存储在数据库中,其数据来自定义视图时查询所引用的表(基表),在每次引用视图时动态生成
  • 由于视图和基表用的本质是同一份数据,因此对视图的修改会影响到基表,对基表的修改也会影响到视图

二、基本使用

准备测试表

下面用员工表和部门表作为测试表,员工表中的ename代表的是员工的姓名,deptno代表的是员工所在部门的部门号。部门表中的dname代表的是部门名,deptno代表的是部门的部门号

MySQL视图特性_第1张图片

2.1 创建视图

创建视图时会先执行select语句,然后用查询得到的结果来创建视图 

CREATE VIEW view_name AS SELECT ...;

当要查询每个员工及其对应的部门名称时,需使用员工表和部门表进行多表查询,并筛选出员工的部门号等于部门的部门号的记录

MySQL视图特性_第2张图片

若该查询结果会被频繁用到,那就可以给上述查询结果创建视图,创建完毕后通过show命令就能看到这个视图

MySQL视图特性_第3张图片

在数据库对应的目录下,会增加一个对应的xxx.frm文件,但并没有与之对应的xxx.ibd文件,也证明了视图和基表使用的是同一份数据

MySQL视图特性_第4张图片

创建视图后可以直接通过查询视图,查看每个员工及其对应的部门名称

MySQL视图特性_第5张图片

2.2 修改视图影响基表

通过查询员工表,可以看到员工CLARK所在部门的部门号为10

MySQL视图特性_第6张图片

查询部门表,可以看到10号部门的部门名称为ACCOUNTING

MySQL视图特性_第7张图片

在视图中将员工CLARK所在部门的部门名改为HR后,会看到其他一些员工所在部门的部门名也变为HR了

MySQL视图特性_第8张图片

根本原因就是因为视图和基表使用的是同一份数据,将视图中CLARK所在部门的部门名改为HR后,部门表中10号部门的部门名也变成HR了

MySQL视图特性_第9张图片

而位于10号部门的员工同时还有KING和MILLER,因此修改后再次查询视图时,这两个员工对应的部门名也会变为HR

MySQL视图特性_第10张图片

2.3 修改基表影响视图

修改基表emp,视图v_ename_dname受到影响 

MySQL视图特性_第11张图片

 

2.4 删除视图

DROP VIEW view_name;

MySQL视图特性_第12张图片

并且该视图在数据库目录下对应的xxx.frm文件也会被删除

MySQL视图特性_第13张图片

三、视图规则和限制

  • 与普通表一样,视图的命名也必须是唯一的,不能出现同名视图或表名
  • 创建视图的数目无限制,但要考虑复杂查询创建为视图后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,在访问视图时必须具有足够的访问权限
  • 创建视图时可以使用order by子句,但若从该视图检索数据时也含有order by子句,那么该视图中的order by将被覆盖
  • 视图可以和普通表一起使用,如进行多表查询,内外连接等

你可能感兴趣的:(MySQL,mysql,数据库,sql)