ホームページ > データベース > mysql チュートリアル > MySQL で参照整合性チェックを延期できますか?

MySQL で参照整合性チェックを延期できますか?

Barbara Streisand
リリース: 2024-11-10 19:48:03
オリジナル
631 人が閲覧しました

Can Referential Integrity Checks Be Deferred in MySQL?

MySQL での参照整合性チェックの延期: 可能ですか?

MySQL では、参照整合性チェックはコミットまで延期されません。 MySQL ドキュメントで説明されているように、

InnoDB は UNIQUE 制約と FOREIGN KEY 制約を行ごとにチェックします。外部キー チェックを実行するとき、InnoDB は参照する必要がある子レコードまたは親レコードに行レベルの共有ロックを設定します。 InnoDB は外部キー制約を即座にチェックします。チェックはトランザクションのコミットまで延期されません。

この動作は、制約チェックをトランザクションの終了まで延期する必要があると規定する SQL 標準に反します。ただし、InnoDB は現在、遅延制約チェックをサポートしていません。

データ操作への影響

参照整合性チェックを即時実施すると、関連データの挿入または変更時に問題が発生する可能性があります。 。たとえば、別のテーブルの親レコードを参照するテーブルに子レコードを挿入しようとすると、MySQL は即座に外部キー チェックを実行します。親レコードがまだ存在しないか削除されている場合、挿入操作は失敗します。

遅延チェックの代替手段

MySQL は真の遅延制約チェックをサポートしていません。 、その影響をシミュレートできる回避策があります:

  • Set AUTOCOMMIT to 0: トランザクションを開始する前に SET AUTOCOMMIT=0 を実行すると、MySQL が自動的に変更をコミットしなくなります。制約は、COMMIT が発行されるトランザクションの最後にのみチェックされます。
  • ストアド プロシージャを使用する: ストアド プロシージャを使用すると、単一トランザクション内で複数の SQL ステートメントを実行できます。これにより、操作の順序をより詳細に制御できるようになり、制約エラーの防止に役立ちます。

これらの代替方法は、遅延制約チェックの動作を完全に複製するわけではないことに注意することが重要です。データの整合性を確保するために、追加の手動介入やコードの変更が必要になる場合があります。

以上がMySQL で参照整合性チェックを延期できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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