MySQL视图

简介:

MySQL 5.0版本之后引入视图。

视图本身是一个虚拟表,不存放任何数据。使用SQL语句访问视图时,它返回的数据都是从其他表里生成的。视图和表是在同一个命名空间,MySQL对于二者大多是同样对待的。

不过也有不同,例如:不能对视图创建触发器,也不能使用DROP TABLE命令删除视图。

视图不仅可以简化用户对数据的理解,也可以简化他们的操作。 那些被经常使用的查询可以被定义为视图,从而使用户不必为之后的操作指定全部的条件。同时通过视图,用户只能查询和修改指定的数据。 且视图可帮助用户屏蔽真实表结构变化带来的影响。

创建视图:

CREATE [or replace] view [view_name] as [table];
image-20240906205548245

视图查询:

视图是一张虚拟存在的表。大多数表的操作也可以对视图执行。

image-20240906205759734

视图修改:

alter view [view_name] as [table];
image-20240906210443893

视图删除:

然而删除表和删除视图的SQL语句是不相同的

drop view [view_name];
image-20240906210521339

视图检查选项

视图和表有绑定关系,向视图中添加数据,同时也会向表中添加数据。 但是如果视图表有条件,添加的数据如果不满足条件,在视图中则不会显示。

当使用检查选项字句创建视图时,MySQL会通过视图检查正在更改的每个行。以使其符合视图的定义。MySQL同时允许基于另一个视图创建视图,为了确定检查的范围mysql提供了 CASCADED(默认) 和 LOCAL 两个选项。

cascaded

在视图创建提供了语法 with cascaded check option 则对该视图进行写操作时,会对当前视图和依赖的所有视图进行检查,只有数据合法时,才能添加成功。

local

MySQL8.0 加入。会检查当前视图和依赖的所有视图。只有视图存在检查选项时,才对视图中的条件进行检查,否则不检查。

视图更新:

条件:

视图可更新的条件,视图中的行和基础表的行之间必须存在一对一的关系。

包含以下任何一项时,视图是不可更新的 聚合函数或窗口函数 DISTINCT GROUP BY HAVING UNION

上一篇
下一篇