このページは機械翻訳したものです。
更新可能なビューに WITH CHECK OPTION
句を指定して、select_statement
の WHERE
句が true でない行への挿入を防止できます。 また、WHERE
句が true であるが、更新によって true にならない行の更新も防止されます (つまり、表示可能な行が非表示の行に更新されないようにします)。
更新可能なビューに対する WITH CHECK OPTION
句では、そのビューが別のビューとの関連で定義されている場合、LOCAL
および CASCADED
キーワードによってチェックテストのスコープが決定されます。 どちらのキーワードも指定されていない場合、デフォルトは CASCADED
になります。
WITH CHECK OPTION
テストは標準に準拠しています:
LOCAL
では、ビューのWHERE
句がチェックされ、基礎となるビューに対してチェックが繰り返され、同じルールが適用されます。CASCADED
では、ビューのWHERE
句がチェックされ、基礎となるビューに対してチェックが繰り返され、WITH CASCADED CHECK OPTION
が追加されて (チェックの目的で、定義は変更されません)、同じルールが適用されます。チェックオプションを指定しない場合、ビューの
WHERE
句はチェックされず、基礎となるビューに対してチェックが繰り返され、同じルールが適用されます。
次のテーブルと一連のビューの定義を考えてみてください。
Press CTRL+C to copyCREATE 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
のチェックも失敗します:
Press CTRL+C to copymysql> 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'