如果視圖定義包括條件(譬如 WHERE 子句)并且其意圖是確保任何引用該視圖的 INSERT 或 UPDATE 語句都應(yīng)用 WHERE 子句,則必須使用 WITH CHECK OPTION 定義該視圖。這個(gè)選項(xiàng)可以確保數(shù)據(jù)庫中正在修改的數(shù)據(jù)的完整性。如果在 INSERT 或 UPDATE 操作期間違反了條件,則返回 SQL 錯(cuò)誤。
下面是一個(gè)使用了 WITH CHECK OPTION 的視圖定義的示例。要確保總是檢查條件,WITH CHECK OPTION 是必需的。在這種情況下,我們希望確保 DEPT 總是 10。這會限制 DEPT 列的輸入值。當(dāng)使用視圖插入新值時(shí),總是強(qiáng)制執(zhí)行 WITH CHECK OPTION。
復(fù)制代碼代碼如下:
CREATE VIEW EMP_VIEW2
(EMPNO,EMPNAME,DEPTNO,JOBTITLE,HIREDATE)
AS SELECT ID,NAME,DEPT,JOB,HIREDATE FROM EMPLOYEE
WHERE DEPT=10
WITH CHECK OPTION;
如果這個(gè)子句不存在,那么某個(gè)使用該視圖的用戶就有可能更新某條記錄,使其不再屬于該視圖。例如,下列 SQL 語句可能會引起一些問題。
UPDATE EMP_VIEW2 SET DEPT=20 WHERE DEPT=10;
這個(gè)語句的結(jié)果是該視圖現(xiàn)在不包含任何記錄,因?yàn)椴块T 10 不再有雇員了。