7

ドキュメントには次のように記載されています。

「NO ACTION」を構成すると、親キーが変更されたり、データベースから削除されたりしても、特別なアクションは実行されません。

この文の私の最初の解釈は、「親キーが変更または削除された場合、この変更が行われ、他のアクションは実行されない」ため、データベースの整合性が維持されず、混乱につながります。しかし、私のテストでは、親キーを削除しようとすると(子キーがまだ存在する場合)、例外が発生することが示されました(「SQLiteConstraintException:エラーコード19:制約に失敗しました」-Android 4.0.3 / SQLiteでテストしています3.7.x) であるため、"NO ACTION" は期待どおりに動作するようです。

誰かが説明して、おそらく例を挙げてください。「NO ACTION」が正確に何をし、「RESTRICT」とどのように違うのか.

4

1 に答える 1

3

導入段落は次のように述べています。

アクションが明示的に指定されていない場合、デフォルトは「NO ACTION」です。

これ通常の動作です。

さらに:

RESTRICT アクションの効果と通常の外部キー制約の強制の違いは、フィールドが更新されるとすぐに RESTRICT アクションの処理が行われることです。即時制約の場合のように現在のステートメントの最後ではなく、最後でも実行されます。遅延制約の場合と同様に、現在のトランザクションの。

NO ACTION1 つのレコードのみを変更する単一ステートメントのトランザクションでテストしている場合、 と の間に違いは見られませんRESTRICT

于 2013-07-11T20:28:37.307 に答える