最初の引用では、制約はすでに novalidate で有効になっていると思います。制約は既に有効になっているため、新しい挿入と更新はすべて制約に準拠する必要があります。すでに有効になっている制約からの「有効化検証」中に、履歴データが変更されて制約に違反することはなく (読み取りロックは必要ありません)、新しいデータは既に有効になっているため制約に準拠する必要があります (書き込みロックは必要ありません)。
2 番目の引用では、制約が無効になっています。検証で有効になっているため、検証が成功するまで制約を追加しないでください。履歴データに応じて、制約の有効化が成功または失敗する可能性があるため、insert/update ステートメントは、有効化されるまで制約をチェックするかどうかがわからないため、操作が完了するまでロックする必要があります。この 2 つの違いは、基本的には、validate を指定したときに制約が無効になっていたかどうかです。
これを説明するのに役立つ例を次に示します。あなたがビジネスを経営していて、数年後に小銭を受け取りたくないと決めたと想像してみてください。上記の最初のシナリオでは、ペニーで支払う人がいない限り、新しいトランザクションを受け入れ続けることができ、後で領収書を調べて、過去にペニーで支払った人がいないかどうかを確認しますが、レジ係は作業を続けることができます。関係なく。2 番目のシナリオは、「誰もペニーで支払ったことがない場合、私はもうペニーを受け取りたくありません」と言います。または、ペニーでの新しい取引を受け入れないため、レジ係はレジスターにロックをかけて、監査が完了するまで家に帰ります。これが最良の例ではないことはわかっていますが、