student表:
95001 李勇 男 20 CS
95002 劉晨 女 21 IS
95003 王敏 女 18 MA
95004 張力 男 19 IS
建立視圖IS_STUDENT顯示“IS”系所有學生的學號、姓名、性別。
create view IS_STUDENT
as
select Sno,Sname,Ssex from Student
where Sdept='IS'
with check option;
用insert語句向視圖中插入元組('95009','王五','男'),查看基本表student表中插入的數據值。
下面是失敗的消息: 消息 550,級別 16,狀態 1,第 1 行
試圖進行的插入或更新已失敗,原因是目標視圖或者目標視圖所跨越的某一視圖指定了 WITH CHECK OPTION,而該操作的一個或多個結果行又不符合 CHECK OPTION 約束。 語句已終止
解答:
with check option可以這么解釋:通過視圖進行的修改,必須也能通過該視圖看到修改后的結果。
比如你insert,那么加的這條記錄在刷新視圖后必須可以看到; 如果修改,修改完的結果也必須能通過該視圖看到;如果刪除,當然只能刪除視圖里有顯示的記錄。
小結:
首先視圖只操作它可以查詢出來的數據,對於它查詢不出的數據,即使基表有,也不可以通過視圖來操作。
1.對於update,有with check option,要保證update后,數據要被視圖查詢出來
2.對於delete,有無with check option都一樣
3.對於insert,有with check option,要保證insert后,數據要被視圖查詢出來
4.對於沒有where 子句的視圖,使用with check option是多余的
原地址:http://www.cnblogs.com/wangaohui/archive/2012/12/15/2819419.html