1

2 つの異なるサーバー インスタンスでアプリケーションを実行しています。アプリケーションには、1 分ごとに実行するようにタイマーが設定されたシングルトン EJB があります。EJB のメソッドは、テーブルからレコードを読み取り、それを削除し、キューを介して発行します (すべて 1 つのトランザクションの一部)。両方のサーバーが起動すると、同時にテーブルからレコードを読み取ろうとします。

私の質問は、トランザクションが終了するまで、1 つのアプリケーションだけがレコードを読み取れるようにする方法です。

4

2 に答える 2

1

select for update を使用できます。

select * from table for update

これにより、トランザクションの間、選択されたレコードがブロックされます。つまり、他のサーバーによって発行された同じクエリは、トランザクションがコミットされるまで待機します。

SELECT ... FOR UPDATE は、最新の利用可能なデータを読み取り、読み取る各行に排他ロックを設定します。したがって、検索された SQL UPDATE が行に設定するのと同じロックを設定します。

https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html

于 2017-07-28T11:34:52.030 に答える