ホームページ > データベース > mysql チュートリアル > 遅延制約と即時制約は、データベース トランザクションにおける主キーと一意キーの適用にどのような影響を与えますか?

遅延制約と即時制約は、データベース トランザクションにおける主キーと一意キーの適用にどのような影響を与えますか?

Patricia Arquette
リリース: 2025-01-06 09:02:44
オリジナル
750 人が閲覧しました

How Do Deferred and Immediate Constraints Affect Primary and Unique Key Enforcement in Database Transactions?

DEFERRABLE INITIALLY IMMEDIATE で定義された制約は延期されたまま

遅延制約の適用

DEFERRED / DEFERRABLE および INITIALLY IMMEDIATE として定義された主キー制約と一意キー制約トランザクション実行中の特定の時点で一意性を強制します。

遅延状態

1.複数の行を変更する Update ステートメント:

主キーのスワップを伴う複数の行を変更する UPDATE ステートメントは、制約チェックがステートメントの後まで延期されるため、INITIALLY IMMEDIATE 制約があっても成功します。

2.データ変更 CTE:

データ変更 CTE は、遅延されていない主キー違反により失敗する更新の競合を除き、同様に動作します。

3.トランザクション内の複数の UPDATE ステートメント:

SET CONSTRAINTS を使用しないと、各ステートメントの後にチェックが実行されるため、一意の制約に違反するトランザクション内の複数の UPDATE ステートメントは失敗します。

即時状態

  • INITIALLY IMMEDIATE で定義された制約は次のとおりです。各ステートメントの後にのみ適用されます。
  • INITALLY IMMEDIATE と SET CONSTRAINTS IMMEDIATE は同じように動作します。

遅延と PostgreSQL 実装

  • PostgreSQL は非遅延制約を適用します行が更新されるたびに、
  • DEFERRABLE 制約は、この欠陥のある実装に対する回避策を提供します。

制約の適用の概要

  • DEFERRABLE INITIALLY IMMEDIATE 制約はステートメントの後にチェックされます。
  • 最初は延期可能DEFERRED 制約はトランザクション後にチェックされます。
  • 非遅延制約はすべてのコマンドの後にチェックされます。

注: UNIQUE 制約と PRIMARY KEY 制約は特別に扱われ、非遅延制約は、行が変更されるたびにすぐにチェックされます。

SQL との互換性Standard

標準に準拠した動作を実現するには、DEFERRABLE 制約を INITIALLY IMMEDIATE として宣言する必要がありますが、遅延はしないでください。これにより、即時一意性チェックと比較してパフォーマンスが低下する可能性があります。

外部キー制約

参照される列は遅延不可能な一意性制約または主キー制約である必要があるため、DEFERRABLE 制約は FOREIGN KEY 参照には使用できません。

以上が遅延制約と即時制約は、データベース トランザクションにおける主キーと一意キーの適用にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート