本文参考了高性能MySQL
数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表,并且在引用视图时动态生成。
视图的实现
视图中不存放任何数据,在使用SQL语句访问视图的时候,返回的数据时MySQL从其他表中生成的。视图和表在同一个命名空间,在很多地方对于视图和表是同样对待的。不过也有不同,不能对视图创建触发器,不能使用DROP TABLE命令删除视图。
假设我们创建一个视图:
create view Oceania as
select * from Country where Continent ='Oceania'
with check option;
实现视图最简单的方法是将select语句的结果存放到临时表中。当需要访问视图的时候,直接访问临时表就可以。比如:
select Code, Name from Oceania where Name =‘Australia’;
在实现上述查询时,有两种方式去实现,一种是使用临时表,还有一种是重写含有视图的查询,将视图的定义SQL直接包含进查询的SQL中:
使用临时表算法:
create temporary table TMP_Oceania_123 as
select * from Country where Continent = ‘Oceania’;
select Code, Name from TMP_Oceania_123where Name = ‘Australia’;
使用合并算法的