同時挿入防止のための存在しない InnoDB 行のロック
データベース管理システムでは、データの整合性を確保し、同時アクセスの競合を防ぐことが重要です。 InnoDB では、存在しない行を中断せずに検索して挿入しようとすると課題が発生します。
従来のアプローチ
最初は、LOCK IN の利用を提案する人もいるかもしれません。既存の行に対する SHARE MODE および FOR UPDATE キーワード。ただし、存在しない行をロックしようとすると、この方法では不十分です。
SELECT ... FOR UPDATE の制限事項
SELECT ... FOR UPDATE は同時実行を妨げます。既存のレコードに挿入する場合、存在しない行をロックしようとすると失敗します。同時セッションでは、SELECT ... FOR UPDATE を使用して同じ存在しない行をロックすることができ、競合状態が発生し、挿入操作中にデッドロックやキー エラーが発生する可能性があります。
より良い解決策
MySQL には存在しない行に対するネイティブ ロック メカニズムがないため、代替アプローチが必要です。 2 つの実行可能なオプションは次のとおりです:
結論
競合状態を防止し、整合性を確保するには存在しない行へのデータベース挿入の頻度を下げる、セマフォ テーブルを利用する、またはテーブル全体をロックすることは、パフォーマンスに影響を与える可能性はありますが、効果的な回避策を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3