SQL视图的withcheckoption
⼀.⽹上查阅了很多关于该选项的内容,不是很清楚,但是看了下⾯这个例⼦豁然开朗:
对视图进⾏update或者insert操作时,保证更新或者插⼊的⾏满⾜图中定义的谓词条件 假如⼀张表⾥有个字段是专业的;你创建视图的时候create view stu as select 学⽣ from table where 专业='计算机' with check option 这样where后⾯就实现了对专业的限定 以后你如果对视图添加记录的时候专业如果不是计算机的话不让添加进去的
⼆.再看下⾯的例⼦,如果发现有点蒙圈,再回来看上⾯的例⼦:
我们来看下⾯的例⼦:
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是什么update testview
set ename = ‘Mike’
where empno = 7654;
OK,这条更新语句可以执⾏,并没有什么问题,但是当我们执⾏另⼀条更新时:
update testview
set ename = ‘Robin’
where empno = ‘7654′;
就会出现ORA-01402: 视图 WITH CHECK OPTIDN 违反 where ⼦句的错误,这是因为什么呢?
这是因为前⾯我们在创建视图时指定了witch check option关键字,这也就是说,更新后的每⼀条数据仍然要满⾜创建视图时指定的where 条件,所以我们这⾥发⽣了错误ORA-01402。
但是需要说明的时 ,虽然指定了with check option,我们还是可以删除视图中的数据。例如上例中,我们可以使⽤
delete from test where where empno =  7654
--------------------------------------------------------------------------------
我创建⼀个视图:
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  语句中所设的条件。如果使⽤该⼦句,修改⾏时需考虑到不让它在修改完后从视图中消失。任何可能导致⾏消失的修改都会被取消,并显⽰错误信息。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。