with check option的学习

来源:互联网 发布:mac版cad2014破解文件 编辑:程序博客网 时间:2024/04/28 21:46

http://www.cnblogs.com/wangaohui/archive/2012/12/15/2819419.html

今天写数据库的实验报告,对with check option不是很理解,按照书上的写代码就是不行,很是纠结,网上查了一下,发现一篇写的还是挺通俗简洁的,在这贴下来。

 

student表:

95001 李勇 男 20 CS 

95002 刘晨 女 21 IS 

95003 王敏 女 18 MA 

95004 张力 男 19 IS 

建立视图IS_STUDENT显示“IS”系所有学生的学号、姓名、性别。

create view IS_STUDENT

as

select Sno,Sname,Ssex from Student

where Sdept='IS'

with check option;


用insert语句向视图中插入元组('95009','王五','男'),查看基本表student表中插入的数据值。

问题:当没有加上with check option 的时候,可以成功插入,切插入到基本表的年龄和专业都是null。 当加上with check ooption 的时候,就插入失败了,这是怎么回事?麻烦详解一下


下面是失败的消息: 消息 550,级别 16,状态 1,第 1 行

试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。 语句已终止

解答:

with check  option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。

比如你insert,那么加的这条记录在刷新视图后必须可以看到; 如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。

 

小结:

首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。 

1.对于update,有with check option,要保证update后,数据要被视图查询出来

2.对于delete,有无with check option都一样

3.对于insert,有with check option,要保证insert后,数据要被视图查询出来

4.对于没有where 子句的视图,使用with check option是多余的


0 0
原创粉丝点击