前期准备:
1、create table person # 假设这张表用来收录所以有地球人的基本信息。
(ID bigint ,
Name varchar(16),
Country varchar(16));
2、create view Chinise # 这个视图用于查询所以有中国人的基本信息。
as
select ID,Name,Country from Person
where Country = 'China';
3、查找中国叫张三的人
select ID,Name,Country from Chinese where Name = '张三';
--------------------------------------------------------------------------------------------------------------------------------------------------------
方法 1、
合并算法
这中算法中、视图的数据还是只保存在表中、并没有从表中分离出来;也就是说我们对 张三 的查询会转化为
select ID,Name,Country from Chinese where Name = '张三' and Country = 'China';引擎会帮我们完成
条件的合并。合并算法内部是一个映射关系,如果 view的第一行 对就table 的X 行,view的第二行对应table 的第y 行。
既然是一种映射对view第一行的修改也就是对 table 第X行的修改。delete时同理。
也就是说合并算法支持对view 的 insert update delete select;(上文说的映射是 一对一映射)
然、
有些时候合并算法是没有办法完成的、也就是说对view 的 insert update delete select;都会引发错误。
如:create view viewXXX as select Name ,count(*) from person group by Name;这样就不存在一对一的映射了,也就不能用合并算法了
方法 2、
临时表算法
就是把view 查询出来的数据保存到一张临时表中、以后对view的操作就是对这张表的操作,哪怕是多个用户也是一张表。引擎会在合适的时间内
更新这张表、