ホームページ >データベース >mysql チュートリアル >InnoDB に存在しない行を挿入するときに競合状態を防ぐにはどうすればよいですか?
同時挿入防止のための存在しない InnoDB 行のロック
データベース管理システムでは、データの整合性を確保し、同時アクセスの競合を防ぐことが重要です。 InnoDB では、存在しない行を中断せずに検索して挿入しようとすると課題が発生します。
従来のアプローチ
最初は、LOCK IN の利用を提案する人もいるかもしれません。既存の行に対する SHARE MODE および FOR UPDATE キーワード。ただし、この方法は、存在しない行をロックしようとすると不十分です。
SELECT ... FOR UPDATE の制限
SELECT ... FOR UPDATE は同時実行を防止します。既存のレコードに挿入する場合、存在しない行をロックしようとすると失敗します。同時セッションでは、SELECT ... FOR UPDATE を使用して同じ存在しない行をロックすることができ、競合状態が発生し、挿入操作中にデッドロックやキー エラーが発生する可能性があります。
より良い解決策
MySQL には存在しない行に対するネイティブ ロック メカニズムがないため、代替アプローチが必要です。 2 つの実行可能なオプションは次のとおりです。
結論
競合状態を防止し、整合性を確保するには存在しない行へのデータベース挿入の頻度を下げる、セマフォ テーブルを利用する、またはテーブル全体をロックすることは、パフォーマンスに影響を与える可能性はありますが、効果的な回避策となります。
以上がInnoDB に存在しない行を挿入するときに競合状態を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。