SQL 对WITH CHECK OPTION的理解

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后的条件,即不该出现在此视图中的数据,也无法在此视图中插入和更新。

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值