zoukankan      html  css  js  c++  java
  • Mysql 视图笔记2

    这学期开了数据库的课,对sql注入颇感兴趣。因此,对数据库语句也颇为喜爱。遇到了with check option 问题。这属于sql view里面的一个问题。在此略做小结。大牛勿喷!

    先自定义一个table   名为 :Star

    先定义视图找出所有张姓明星:

    Java代码
    1. create view  IS_Star  
    Java代码 
    1. as  
    2.   
    3. select  *from Star  
    Java代码
    1. where  name  like '张%'   
    2.   
    3. with check option    

     获取张姓明星情况:

    Java代码 
    1. select * from IS_Star  

     此时,with  check option 约束条件是对视图里面所有的name 首字符必须是以 ‘张’字打头。不管是修改前还是修改后都必须总从此规则。否则出错。

     比如

    Java代码 
    1. update IS_Star  set name='刘家辉'  where name='张家辉  

     这是不可以的。

     而

    Java代码  收藏代码
    1. update IS_test set name='张家界'  where name='张家辉'  

     是可以。前后姓没有变。满足where 后面的约束条件。

    而如果在选取视图的时候没有使用 with check option 约束语句的话,那么。是可以改得。也就是张家辉既可以变成刘家辉也可以变成张家界

     另外如果选取年龄大于四十的明星

    Java代码  收藏代码
    1. create  view IS_Star1   
    Java代码 
    1. as  
    Java代码
    1. select * from Star where age>40  
    Java代码 
    1. with check option   
    Java代码 
    1.   
    Java代码 
    1. update  IS_Star1 set age=age-6 where name='张家辉'  

       这样会报错 服务器: 消息 550,级别 16,状态 1,行 1
    试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。
    语句已终止。

      而如果是

    Java代码 
    1. update  IS_Star1 set age=age-4 where name='张家辉'  

      那么则正确插入。这里的意思是在视图里面的所有信息,只要在创建视图的时候加了with check option  那么。则不允许它的那个属性值变为不属于 where 后面条件的情况 

     如果不加with check option 那么则值可以任意变。

    Java代码 
    1. /*create  view IS_Star2 
    2. as  select * from Star   
    3. where age >40  
    4.  
    5.  
    6. select * from IS_Star2 
    7.  
    8. 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是多余的

  • 相关阅读:
    JAVA编写的一个简单的Socket实现的HTTP响应服务器
    IPTV 质量评价方法已经不适用于 OTT TV 质量评价
    AAC规格(LC,HE,HEv2)及性能对比
    洛谷 P1572 计算分数
    洛谷 P2128 赤壁之战
    洛谷 P2818 天使的起誓
    洛谷 P3914 染色计数
    洛谷 P1193 洛谷团队训练VS传统团队训练
    洛谷 P1318 积水面积
    洛谷 P1061 Jam的计数法
  • 原文地址:https://www.cnblogs.com/bohanfu/p/5737480.html
Copyright © 2011-2022 走看看