MySQL でデッドロックが発生し、非常にイライラしています。デッドロックが発生すると即座に発生するため、ロックのタイムアウトを超えたことが原因ではありません。デッドロックを生成する 2 つの別個のスレッド (接続プールからの 2 つの別個の接続) で実行されている SQL コードを次に示します。
UPDATE Sequences SET Counter = LAST_INSERT_ID(Counter + 1) WHERE Sequence IS NULL
Sequences テーブルには、Sequence と Counter の 2 つの列があります。
LAST_INSERT_ID により、MySQL の推奨に従って、この更新されたカウンター値を取得できます。それは私たちにとって完璧に機能しますが、これらのデッドロックが発生します! なぜそれらを取得しているのか、どうすれば回避できるのでしょうか??
これについて何か助けてくれてありがとう。
EDIT:これはすべてトランザクション内にあり(Hibernateを使用しているため必要です)、AUTO_INCREMENTはここでは意味がありません。もっとはっきり言うべきだった。Sequences テーブルには、多くのシーケンスが保持されます (この例では約 1 億個)。カウンターをインクリメントして、その値を取得する必要があります。AUTO_INCREMENT は、これらすべてにおいて何の役割も果たしません。これは、ID や PRIMARY KEY とは何の関係もありません。