存储对象:视图

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

存储对象:视图_第1张图片

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

由于对视图的操作最终会转换到对基本表的操作,所以插入数据时只需满足基本表条件即可,那么按条件查询视图时,有时候发现从视图中查询的数据和基本表中的数据不一致,所以要为视图加上检查选项,即不满足视图创建条件的数据不可插入。

存储对象:视图_第2张图片

cascaded 当创建视图没有with cascaded check option,对视图操作时就会忽略条件

                当创建视图有with cascaded check option,对视图查询时就会看是否满足条件,如果创建的视图v2与另一个视图v1还存在关联,那么会递归查看视图v1的条件是否满足,即相当与v1也存在了with check option检查选项。

存储对象:视图_第3张图片

local 当往v1中插入数据时,不会检查v1的条件,当往v2插入数据时,因为v2有检查选项,会检查v2的条件,这时因为v2与v1关联,会递归到v1,但因为v1没有检查选项,所以不会检查v1的条件,如果是cascaded,v1会被认为有检查选项,要去检查v1的条件。

这就是local和cascaded的区别

存储对象:视图_第4张图片

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

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

存储对象:视图_第5张图片

你可能感兴趣的:(数据库,sql,sqlserver)