DEFERRED / DEFERRABLE および INITIALLY IMMEDIATE として定義された主キー制約と一意キー制約トランザクション実行中の特定の時点で一意性を強制します。
1.複数の行を変更する Update ステートメント:
主キーのスワップを伴う複数の行を変更する UPDATE ステートメントは、制約チェックがステートメントの後まで延期されるため、INITIALLY IMMEDIATE 制約があっても成功します。
2.データ変更 CTE:
データ変更 CTE は、遅延されていない主キー違反により失敗する更新の競合を除き、同様に動作します。
3.トランザクション内の複数の UPDATE ステートメント:
SET CONSTRAINTS を使用しないと、各ステートメントの後にチェックが実行されるため、一意の制約に違反するトランザクション内の複数の UPDATE ステートメントは失敗します。
注: UNIQUE 制約と PRIMARY KEY 制約は特別に扱われ、非遅延制約は、行が変更されるたびにすぐにチェックされます。
標準に準拠した動作を実現するには、DEFERRABLE 制約を INITIALLY IMMEDIATE として宣言する必要がありますが、遅延はしないでください。これにより、即時一意性チェックと比較してパフォーマンスが低下する可能性があります。
参照される列は遅延不可能な一意性制約または主キー制約である必要があるため、DEFERRABLE 制約は FOREIGN KEY 参照には使用できません。
以上が遅延制約と即時制約は、データベース トランザクションにおける主キーと一意キーの適用にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。