WITH CHECK OPTION的功能是什么
使用WITH CHECK OPTION定义的视图,后续对视图UPDATE、INSERT时也要满足定义时where句后的约束条件,换句话说就是不该在此视图中出现的内容是不能增加或更新到此视图中的。
为了便于理解,我创建了一张student表
创建了一信息系学生视图(IS_student ),并在此基础上加入WITH CHECK OPTION 后创建一张新的视图(IS_student2 ),代码如下:
CREATE VIEW IS_student AS
(SELECT * FROM student WHERE Sdept = 'IS');
CREATE VIEW IS_student2 AS
(SELECT * FROM student WHERE Sdept = 'IS')
WITH CHECK OPTION;
1.分别对两张视图做此操作:将李四的系由IS改为CS,代码如下:
报错 :消息 550,级别 16,状态 1,第 11 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。
而对IS_student 使用此语句时
运行成功。
同理,做INSERT操作时结果也一样。
特别注意,如果要UPDATE、INSERT的数据满足WHERE句后的约束条件(在本题中为Sdept = ‘IS’),则两张视图都可以插入、更新数据。
而且重新查看两张视图,李四这条消息已经不存在了,并且在student表中查看,李四的系已经变成了CS
2.在基本图中插入('2022107','雷武','男',20,'IS')后,在视图中查看,也可以找到相应的数据。
总结:对带有WITH CHECK OPTION 的视图做INSERT、UPDATE操作时的数据也要满足定义时where后的条件,即不该出现在此视图中的数据,也无法在此视图中插入和更新。