此文是記錄數(shù)據(jù)庫平常的學(xué)習(xí)遇見的一些知識點
視圖WITH CHECK OPTION子句
- 引用mysql官方文檔的一句話:可以為可更新視圖指定 WITH CHECK OPTION 子句,
以防止插入 select_statement 中 WHERE 子句不為真的行。它還會阻止更新 WHERE 子句為true的行,
但更新會導(dǎo)致它不為true(換句話說,它會阻止可見行更新為不可見的行)。
在可更新視圖的 WITH CHECK OPTION 子句中,LOCAL 和 CASCADED 關(guān)鍵字在根據(jù)另一個視圖定義視圖時確定檢查測試的范圍。
如果沒有給出關(guān)鍵字,則默認(rèn)為 CASCADED 。
建立測試表和兩個視圖
image
image
image
image
image
這就可以明白有with check option的視圖和沒有with check option的視圖之間的區(qū)別
image
- 沒有with語句的視圖,可以插入符合數(shù)據(jù)庫語法約束的數(shù)據(jù),可是不會在視圖里顯示出來
- 有with語句的視圖,它會阻止可見行更新為不可見的行,
通俗講就是插入的數(shù)據(jù)必須符合視圖的約束,并且可以在視圖里顯示出來。否則它會阻止操作?。?!
- 1.對于update,有with check option,要保證update后,數(shù)據(jù)要被視圖查詢出來
- 2.對于delete,有無with check option都一樣
- 3.對于insert,有with check option,和update相同 要保證insert后,數(shù)據(jù)要被視圖查詢出來
- 4.對于沒有where 子句的視圖,也就沒有視圖自己的約束,因此使用with check option是多余的