相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

27.5.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'