在sql2008中向视图插入数据发生错误

今天用sql2008做数据库做视图相关的实验,前提是:在学生表(tb_student)上建立视图IS_student(Sno,Sname,Sage),视图定义加了with check option,此视图是查询出sdept为IS的学生。

要求是向视图中插入一条数据('1738006',‘赵新’,20),用的sql语句为:insert into IS_student values('1738006',‘赵新’,20),这条语句是照着书上面敲的,然后报错:试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。

在网上查到在要设置sdept的默认值为:'IS'然后才能够解决问题,我觉得有句话大佬们说的很好:

向视图中插入数据,插入的数据必须能够在视图中显示出来(这里我并不理解,后来问了老师才明白)

后来问了老师,老师用很浅显的话跟我解释了为什么这里会插入异常,当我们插入数据时,插入数据假如是这条('1738006',‘赵新’,20),首先假设数据能够插入进去(如果能够插入成功,这条数据其实会插入到tb_student表中,视图并不存储数据,视图只是做了查询的sql语句),然而既没有指定sdept的值(即使tb_student表中sdept属性允许为null),也没有指定sdept的默认值为'IS',插入的sdept到tb_student肯定为null,此时视图查询IS系的学生,这条语句肯定查不出来,前面我在网上查到那句很重要的话说:插入的数据必须能够存在与视图中,所以就数据无法插入,报异常,这也就解释了为什么报错误的原因了。

后来我做了一个实验,建立视图IS_student(Sno,Sname,Sage,Sdept),我此时指定插入的院系为'IS',然后sdept的默认值不进行设置,数据能够插进去,而且能够在视图中显示出来,这也就证明前面所说的时正确的!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值