0

我有一个带有 2 个客户端的客户端-服务器应用程序:

当超过 1 个客户端正在读取数据库时,我需要提高数据库的读取效率,而所有客户端都不会获得相同的行。我对表使用 InnoDB 引擎,我做类似的查询SELECT...FOR UPDATE,但我不使用SHARED MODE

我需要解释该过程在以下情况下的行为方式:

  1. 我在表中有 30 行。每个客户端都有一个到数据库的连接对象
  2. 客户端 A 获得 15 行SELECT ...FOR UPDATE。这些行应该被锁定。
  3. 客户端 B 必须分别获取其他 15 行未被客户端 A 锁定的行SELECT ..FOR UPDATE

当我测试这个场景时,我让客户端 B 也获得了客户端 A 的 15 行。为什么会这样?我设置setAutoCommit(false)并且从不做COMMITROLLBACK查询,因此连接永远不会提交,并且(例如客户端 A 所做的)已设置的锁永远不会被释放。

有人可以指出我正确的方向吗?我做错了什么?

4

1 回答 1

1

我很困惑,您是否要锁定 15 行?如果你是,你错过了:

START TRANSACTION

以下是交易文档的链接:

http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html

于 2012-10-12T13:21:19.880 回答