存储对象:视图

2023-12-31 05:16:50

视图是一种虚拟表,里面的数据并不真实存在。它可以简化对数据的理解和对数据的操作,把操作封装在视图里然后操作即可;通过视图,用户只能查询和修改他们看到的数据,可以帮助用户屏蔽基本表变化所带来的影响

创建视图 :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的区别

不是所有的视图都可以更新

要使视图可更新,视图中的行与基本表中的行必须是一对一的关系,如果视图包含下列任意一项,则不可更新。

文章来源:https://blog.csdn.net/m0_69050443/article/details/135303093
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。