视图的with check option

对视图进行update或者insert操作时,保证更新或者插入的行满足定义的谓词条件。 假如一张表里有个字段是专业,创建视图的时候 create view stu as select 学生 from table where 专业='计算机' with check option,这样where后面就实现了对专业的限定。 以后如果对视图添加记录的时候专业如果不是计算机的话不让添加进去。

举例说明1
create or replace view testview
as
select empno,ename from emp where ename like ‘M%’
with check option;

这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果:select * from testview得到:

EMPNO ENAME
———- ———–
7654 MARTIN
7934 MILLER

然后我们在试图将其中一条更新:

update testview
set ename = ‘Mike’
where empno = 7654;

OK,这条更新语句可以执行,并没有什么问题,但是当我们执行另一条更新时:

update testview
set ename = ‘Robin’
where empno = ‘7654′;

就会出现视图 WITH CHECK OPTIDN 违反 where 子句的错误,这是因为什么呢?

这是因为前面我们在创建视图时指定了witch check option关键字,这也就是说,更新后的每一条数据仍然要满足创建视图时指定的where条件,所以我们这里发生了错误。

但是需要说明的是,虽然指定了with check option,我们还是可以删除视图中的数据。例如上例中,我们可以使用

delete from test where where empno =   7654;
举例说明2

我创建一个视图:

  create   view   IS_student  
  as  
  select   sno,sname,sage  
  from   student  
  where   sdept='IS'  
  with   check   option;  

加上了with check option;后,不能执行插入操作:

insert   into   is_student  
values('95100','李娜',12)  

什么原因?不加上with check option则可以!
with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行。
默认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。

WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的SELECT语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,255评论 0 0
  • 模式 定义模式实际上定义了一个命名空间,在这个空间中 可以进一步 定义该模式包含的数据对象,例如基本表,视图,索引...
    梅先森森森森森森阅读 140评论 0 1
  • Oracle创建关联查询的视图 在项目开发中,有时候会用到多表查询,有很多种方法,比如关联,比如视图,但对于查询来...
    土土豆进阅读 802评论 0 0
  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 672评论 0 0
  • 视图在数据库中是一张虚拟表,表中的字段由自己定义或者来自其他数据库。表中的数据可以来自单张表、单表中若干个字段,还...
    shark_tear阅读 329评论 0 0

友情链接更多精彩内容