1 视图

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同的是,视图是一个虚表。


定义视图:

wKioL1NjLQDAWnxlAADNk98fn7o518.jpg

这样,你就可以像查询其他表一样查询视图,但是我们能直接更新视图。


2 规则

规则是对如何修改解析过的查询树的描述。数据库引擎每次运行一条sql,他将语句解析成查询树(一般称为抽象语法树)。


树的枝和叶是运算符和值,在执行前,树会被遍历/删减,并以其他方式修改。这棵树可以被规则重写,然后发送到查询规划器(它也以某种方式重写这棵树,以达到优化性能运行效果),最后会把最终的命令发送到执行器。

wKiom1NjLU3Qhnv9AAICBo4RLJs914.jpg


3 视图 VS 规则

3.1 视图的查询 VS 规则

视图也是一种规则,因为他也重写查询树,将对视图的查询转化为对视图中定义的sql的查询。


我们使用EXPLAIN命令来查看holidays视图的执行计划。

wKioL1NjLUaAJA96AAE8t8v8la4164.jpg


它与holidays视图定义的sql的执行计划是一样的。

wKioL1NjLWXD6CUFAAFfEJQ9ldE321.jpg


3.2 更新视图 VS 视图

为了允许更新holidays视图,需要定义一条规则,告诉数据库引擎在UPDATE时做什么操作。规则将捕捉对holidays视图的更新,从NEWOLD的伪关系取值,并在events上执行更新。NEW看作是包含即将更新的值的表,而OLD则是包含查询的值。


实际上,规则会将对holidays的更新转换为对events的更新。


创建规则:

wKiom1NjLazB1SFSAADgt6YETJE003.jpg