这学期开了数据库的课,对sql注入颇感兴趣。因此,对数据库语句也颇为喜爱。遇到了with check option 问题。这属于sql view里面的一个问题。在此略做小结。大牛勿喷!
先自定义一个table 名为 :Star
先定义视图找出所有张姓明星:
create view IS_Star
as
select *from Star
where name like '张%'
with check option
获取张姓明星情况:
select * from IS_Star
此时,with check option 约束条件是对视图里面所有的name 首字符必须是以 ‘张’字打头。不管是修改前还是修改后都必须总从此规则。否则出错。
比如
update IS_Star set name='刘家辉' where name='张家辉
这是不可以的。
而
update IS_test set name='张家界' where name='张家辉'
是可以。前后姓没有变。满足where 后面的约束条件。
而如果在选取视图的时候没有使用 with check option 约束语句的话,那么。是可以改得。也就是张家辉既可以变成刘家辉也可以变成张家界
另外如果选取年龄大于四十的明星
create view IS_Star1
as
select * from Star where age>40
with check option
update IS_Star1 set age=age-6 where name='张家辉'
这样会报错 服务器: 消息 550,级别 16,状态 1,行 1
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。
语句已终止。
而如果是
update IS_Star1 set age=age-4 where name='张家辉'
那么则正确插入。这里的意思是在视图里面的所有信息,只要在创建视图的时候加了with check option 那么。则不允许它的那个属性值变为不属于 where 后面条件的情况
如果不加with check option 那么则值可以任意变。
/*create view IS_Star2
as select * from Star
where age >40
select * from IS_Star2
update IS_Star set age =age-10 where name='张家辉'*/
小结:
1.对于update,有with check option,要保证update后,数据要被视图查询出来
2.对于delete,有无with check option都一样
4.对于insert,有with check option,要保证insert后,数据要被视图查询出来
5.对于没有where 子句的视图,使用with check option是多余的
分享到:
相关推荐
浅析网络安全技术.pdf浅析网络安全技术.pdf浅析网络安全技术.pdf
浅析电力系统感性无功补偿 浅析电力系统感性无功补偿
//遍历option和添加、移除optionfunction changeShipMethod(shipping){ var len = $(“select[@name=ISHIPTYPE] option”).length if(shipping.value != “CA”){ $(“select[@name=ISHIPTYPE] option”).each...
WDM PON设备浅析
浅析现代物流管理趋势与发展策略.doc
浅析人工智能体系建设.docx
STUN和TURN技术浅析
浅析美国市场经济模式.docx
全生命周期BOM管理浅析.pdf
2021年浅析数字化工厂五大核心系统.pdf
浅析智能家居无线组网模式.pdf
微服务架构浅析V436页.ppt
浅析路由器相关浅析路浅析路由器相关技术由器相关技术技术浅析路由器相关技术
计算机网络安全浅析计算机网络安全浅析
浅析建筑策划与建筑设计214241270全本,有需要的请下载
浅析云计算下的计算机网络安全技术.pdf
with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What’s new in Python 2.6? 中 with...
浅析昭通天麻产品营销策略-论文.zip