スレッド2は、usersテーブルの行に共有ロックを保持しています。
次に、スレッド1は同じ行で排他ロックを取得しようとし、ロック待機に入ります。
ただし、スレッド2はロックを排他的にエスカレートしようとするため、スレッド1はタイムアウトする機会がありません...しかし、そのためには、ロック待機中のスレッド1を待機する必要がありますが、待機しています。スレッド2。
それぞれがお互いをブロックしています。
それは行き詰まりです。
サーバーは、強制的に相互にブロックしないように、強制終了するトランザクションを選択します。
デッドロック検出により、一方のスレッドがもう一方のスレッドを犠牲にしてすぐに成功することができます。そうしないと、どちらかが長時間待機して死亡するまで、両方がロック待機状態に陥ってしまいます。
自動コミットモードになっていますが、もちろん、トランザクションに参加していないという意味ではありません。 InnoDBを使用するすべてのクエリは引き続きトランザクションで処理されますが、自動コミットを使用すると、クエリの実行開始時にトランザクションが暗黙的に開始され、成功すると暗黙的にコミットされます。