Mysql 視圖筆記2

來源:互聯網
上載者:User

標籤:

這學期開了資料庫的課,對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是多餘的

 

Mysql 視圖筆記2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.