MySQL 8.0 リファレンスマニュアル


25.5.4 WITH CHECK OPTION 句の表示

更新可能なビューに WITH CHECK OPTION 句を指定して、select_statementWHERE 句が true でない行への挿入を防止できます。 また、WHERE 句が true であるが、更新によって true にならない行の更新も防止されます (つまり、表示可能な行が非表示の行に更新されないようにします)。

更新可能なビューに対する WITH CHECK OPTION 句では、そのビューが別のビューとの関連で定義されている場合、LOCAL および CASCADED キーワードによってチェックテストのスコープが決定されます。 どちらのキーワードも指定されていない場合、デフォルトは 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;

ここで、v2 ビューと v3 ビューは、別のビュー 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'

関連キーワード:  チェック, CHECK, OPTION, WHERE, 更新, 定義, イベントスケジューラ, CASCADED, ルール, ストアドルーチン