文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  視圖的 WITH CHECK OPTION 子句

27.6.4 視圖的 WITH CHECK OPTION 子句

可以針對可更新的視圖提供 WITH CHECK OPTION 子句,以防止插入 select_statementWHERE 子句不成立的列。它也可以防止更新 WHERE 子句成立,但更新會導致其不成立的列(換句話說,它會防止可見列被更新為不可見列)。

在可更新視圖的 WITH CHECK OPTION 子句中,LOCALCASCADED 關鍵字決定當視圖根據另一個視圖定義時,檢查測試的範圍。當沒有給定任何一個關鍵字時,預設值為 CASCADED

WITH CHECK OPTION 測試符合標準

  • 使用 LOCAL 時,會檢查視圖的 WHERE 子句,然後檢查會遞迴到基礎視圖並套用相同的規則。

  • 使用 CASCADED 時,會檢查視圖的 WHERE 子句,然後檢查會遞迴到基礎視圖,並將 WITH CASCADED CHECK OPTION 新增至其中(用於檢查目的;其定義保持不變),並套用相同的規則。

  • 若沒有檢查選項,則不會檢查視圖的 WHERE 子句,然後檢查會遞迴到基礎視圖,並套用相同的規則。

考慮以下資料表和一組視圖的定義

CREATE TABLE t1 (a INT);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2
WITH CHECK OPTION;
CREATE VIEW v2 AS SELECT * FROM v1 WHERE a > 0
WITH LOCAL CHECK OPTION;
CREATE VIEW v3 AS SELECT * FROM v1 WHERE a > 0
WITH CASCADED CHECK OPTION;

這裡 v2v3 視圖是根據另一個視圖 v1 定義的。

針對 v2 的插入會根據其 LOCAL 檢查選項進行檢查,然後檢查會遞迴到 v1 並再次套用規則。v1 的規則會導致檢查失敗。對 v3 的檢查也會失敗

mysql> INSERT INTO v2 VALUES (2);
ERROR 1369 (HY000): CHECK OPTION failed 'test.v2'
mysql> INSERT INTO v3 VALUES (2);
ERROR 1369 (HY000): CHECK OPTION failed 'test.v3'