條件一:在鏈接視圖中不能有Order by、Group by、connetc by等語句排序語句。
條件二:基礎表中全部的NOT NULL列都必須在這個視圖中。
條件三:須要更新的列不是虛擬列。
條件四:不可以具備分組函數。函數
除了以上幾個限制條件以外,若須要在視圖上進行DML操做的話,則在創建視圖的Select語句中,還不可以有集合運算符、子查詢等等。以上這些是一些必需要知足的基本條件,缺一不可。不然的話,針對視圖的DML操做,就會以失敗了結。spa
可是,並非說符合了上面這個幾個條件後,視圖就能夠暢所無阻的進行數據更新了,其仍然必須符合必定的規則。這其中,最重要的就是鍵值保存表規則。orm
若是鏈接視圖中的一個基礎表的鍵在他的視圖中仍然存在,而且在鏈接視圖中仍然是主鍵,則這個基礎表就爲鍵值保存表。在鏈接視圖上,對視圖進行插入、刪除、更新等操做時,一次只可以對視圖中的一個鍵值保存表進行更新。排序
with check option對於違反視圖選擇範圍的數據行被插入,將受WITH CHECK OPTION檢查it
視圖上的DML 操做:
DML操做應遵循的原則:
1.簡單視圖能夠執行DML操做;
2.在視圖包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字時不能刪除數據行;
3.在視圖不出現下列狀況時可經過視圖修改基表數據或插入數據:
a.視圖中包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字;
b.使用表達式定義的列;
c.ROWNUM僞列。
d.基表中未在視圖中選擇的其餘列定義爲非空且無默認值。
WITH CHECK OPTION 子句
經過視圖執行的INSERTS和UPDATES操做不能建立該視圖檢索不到的數據行, 由於它會對插入或修改的數據行執行完整性約束和數據有效性檢查。 (也就是說在執行INSERTS、UPDATES時,WHERE條件中除須要INSERT、UPDATE自己的限制條件以外,還須要加上視圖建立時的WHERE條件。)io