デッドロックは、2 つ以上のトランザクションが互いに相手の持つロックを待ち続け、どちらも進めなくなる状態です。DB はデッドロックを検出し、通常は一方のトランザクションを中断して解消します。そのため、アプリケーション側ではリトライ処理が必要です。
デッドロックの発生例
text
Transaction A: row 1 をロックし、その後 row 2 が必要
Transaction B: row 2 をロックし、その後 row 1 が必要
→ A は B を待ち、B は A を待つため DEADLOCK
sql
; ;
accounts .. id; accounts .. id;
accounts .. id; accounts .. id;
