delete ステートメントを含む sproc を実行しようとすると、デッドロック エラーが発生します。何が起こっているのかというと、関連するテーブル行を削除すると同時に更新される FK 制約テーブル行があるということです。制約テーブルで更新されているデータはもはや重要ではなく、更新されているそのデータの取得は、何らかの理由で誰もアクセスできなくなります。たまたま、この更新と削除が一度にすべて発生する可能性があります。したがって、原則として削除する必要があります。
このようなデッドロックを止めるにはどうすればよいですか?
DELETE FROM Storefront.Sidelite WHERE ID = @SideliteID
;
以下は、サイドライト テーブルとサイズ制約テーブルのスクリーン ショットです。
OK、ここでは読み取りは行われていません。Sidelite テーブルが、サイズが更新されているというレコードを削除しようとしている間に、Size テーブルに多くの更新が行われ、これがデッドロックを引き起こしている唯一のタイプのことです。
サイドライト テーブルで削除が行われている間、サイズ テーブルに対するすべての操作を停止する必要があります。その後、トリガーで関連するサイズ レコードを削除します。