我有一个带有 2 个客户端的客户端-服务器应用程序:
当超过 1 个客户端正在读取数据库时,我需要提高数据库的读取效率,而所有客户端都不会获得相同的行。我对表使用 InnoDB 引擎,我做类似的查询SELECT...FOR UPDATE
,但我不使用SHARED MODE
我需要解释该过程在以下情况下的行为方式:
- 我在表中有 30 行。每个客户端都有一个到数据库的连接对象
- 客户端 A 获得 15 行
SELECT ...FOR UPDATE
。这些行应该被锁定。 - 客户端 B 必须分别获取其他 15 行未被客户端 A 锁定的行
SELECT ..FOR UPDATE
。
当我测试这个场景时,我让客户端 B 也获得了客户端 A 的 15 行。为什么会这样?我设置setAutoCommit(false)
并且从不做COMMIT
或ROLLBACK
查询,因此连接永远不会提交,并且(例如客户端 A 所做的)已设置的锁永远不会被释放。
有人可以指出我正确的方向吗?我做错了什么?