1. ホーム
  2. sql

[解決済み] NOT DEFERRABLE vs DEFERRABLE INITIALLY IMMEDIATE(非消耗品)。

2022-10-01 20:07:46

質問

SQL キーワードについて、次のような記事を読みました。 DEFERRABLE データベースシステム - 完全版 .

後者は [延期できない] はデフォルトで、データベースの修正文が実行されるたびに、その修正が外部キー制約に違反する可能性がある場合、その直後に制約がチェックされることを意味します。

しかし、もし私たちがある制約を DEFERRABLE と宣言すれば、制約をチェックする前にトランザクションが完了するまで待機させるというオプションがあります。

私たちはキーワード DEFERRABLE のどちらかで 最初は延期 または 当初は即時 . 前者の場合、チェックは各トランザクションがコミットする直前まで延期されます。後者の場合、チェックは各ステートメントの直後から行われます。

どのように NOT DEFERRABLE とは異なり DEFERRABLE INITIALLY IMMEDIATE ? どちらの場合も、個々のステートメントの後で制約がチェックされるようです。

どのように解決するのですか?

とは DEFERRABLE INITIALLY IMMEDIATE を使えば、必要なときに必要な分だけ制約を繰り延べることができます。

これは、通常はステートメント時に制約をチェックしたいが、例えば、バッチロードのために、コミット時までチェックを延期したい場合に便利です。

制約を延期する構文は、様々なDBMSで異なっています。

とは NOT DEFERRABLE を使うと、コミット時までチェックを先延ばしにすることは決してできません。