整合性をしっかりとらないといけない処理ではトランザクションをかけるのですが、どうもトランザクションのロック待ちでタイムアウトしてしまうことがあるようです。 java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction トランザクションでテーブル全体にロックがかかってしまう 要するに、「トランザクションを実行するためにロックを獲得しなければいけないが、他のコネクションがロックを握っていて、ロックが獲得できない」ということです。 これの根本的な原因は何かと調べますと、InnoDBでトランザクションを使用するときに、行ロックではなく、テーブル全体にロックがかかってしまう場合がある、というところにたどり着きました。 「InnoDBで行ロック/テーブルロックになる条件」を見ながら、少し試してみます。 テーブ
![ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動](https://cdn-ak-scissors.b.st-hatena.com/image/square/6747bb7158c1993dfcceee32cf21d8208b457022/height=288;version=1;width=512/https%3A%2F%2Fblog.katty.in%2Fwp-content%2Fthemes%2Fcocoon-master%2Fscreenshot.jpg)