文章目录

  • 一、视图概念
  • 二、创建视图
  • 三、证明数据来源于表
  • 四、视图规则与限制


一、视图概念

视图的关键点有两点,一个是创建,一个是数据来源。
视图是一个虚拟的表,其内容由查询来进行定义。视图的数据变化会影响基表,基表的数据变化也会影响视图。
注意,视图不是一个真正的表,但是我们可以使用和表一样的操作来查询它。

二、创建视图

create view 视图名 as select 语句

注意,视图名不要和基表的名字相同。
比如我们可以将emp表的两列作为一个视图:

mysql> create view myview as select ename,job from emp;//将基表的ename和job定义成一个视图

mysql创建视图指定主键 mysql 建立视图_触发器


我们可以查看一下视图中的数据,查询的方法和一个表示一样的。

mysql创建视图指定主键 mysql 建立视图_数据库_02

三、证明数据来源于表

当建立一个表之后,我们可以进入/var/lib/mysql的路径下查看一下表的存储位置:

var/lib/mysql/scott

mysql创建视图指定主键 mysql 建立视图_数据库_03


会发现这里面是没有myview的结构的,值得注意的是MySQL8.0将.frm文件并入到了.ibd文件中。

我们修改表myview中的内容:

mysql> update myview set job='TEACHER' where ename='SMITH';

此时我们再来查询基表emp中的内容,发现做了修改。

mysql创建视图指定主键 mysql 建立视图_数据_04


说明两个表的数据是一个数据,同理修改基表的数据,视图中的数据也会发生改变。

四、视图规则与限制

  • 与表一样,必须唯一命名(不能出现同名视图与表名)。
  • 创建视图数据无限制,但要考虑复杂查询创建为视图之后的性能影响。
  • 视图不能添加索引,也不能添加关联的触发器或者默认值。
  • 视图可以提高安全性,但必须有足够的访问权限。
  • order可以用在视图中,但是如果从视图中检索数据select中也含有order,那么视图中的order by将被覆盖。
  • 视图和表可以一起使用。