视图是一种虚拟表,里面的数据并不真实存在。它可以简化对数据的理解和对数据的操作,把操作封装在视图里然后操作即可;通过视图,用户只能查询和修改他们看到的数据,可以帮助用户屏蔽基本表变化所带来的影响
创建视图 :create? [or replace] view 视图名[(列名列表)]?as select语句 [with [cascade | local] check option]? //创建时or replace 可以不加
查询视图 :show create view;//查询创建视图的sql语句
? ? ? ? ? ? ? ? ? ?select * form 视图名称...? ?//像查询表一样对视图进行查询
修改视图 :create? [or replace] view 视图名[(列名列表)] as select语句 [with [cascade | local] check option]
????????????????????????//修改视图时必须加上 or replace
? ? ? ? ? ? ? ? ? ?alter view 视图名[(列名列表)] as select语句?[with [cascade | local] check option]
删除视图 :drop view [if exists] 视图名?
视图的检查选项with check option
由于对视图的操作最终会转换到对基本表的操作,所以插入数据时只需满足基本表条件即可,那么按条件查询视图时,有时候发现从视图中查询的数据和基本表中的数据不一致,所以要为视图加上检查选项,即不满足视图创建条件的数据不可插入。
cascaded 当创建视图没有with cascaded check option,对视图操作时就会忽略条件
? ? ? ? ? ? ? ? 当创建视图有with cascaded check option,对视图查询时就会看是否满足条件,如果创建的视图v2与另一个视图v1还存在关联,那么会递归查看视图v1的条件是否满足,即相当与v1也存在了with check option检查选项。
local 当往v1中插入数据时,不会检查v1的条件,当往v2插入数据时,因为v2有检查选项,会检查v2的条件,这时因为v2与v1关联,会递归到v1,但因为v1没有检查选项,所以不会检查v1的条件,如果是cascaded,v1会被认为有检查选项,要去检查v1的条件。
这就是local和cascaded的区别
不是所有的视图都可以更新
要使视图可更新,视图中的行与基本表中的行必须是一对一的关系,如果视图包含下列任意一项,则不可更新。