InnoDB中的行锁定需要快速解释

时间:2012-10-12 13:15:44

标签: mysql jdbc locking rowlocking

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

当多个客户端正在读取数据库时,我需要使数据库的读取更有效率,而不是所有客户端都获得相同的行。我对表使用InnoDB引擎,我执行SELECT...FOR UPDATE之类的查询而不使用SHARED MODE

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

  1. 表格中有30行。每个客户端都有一个到数据库的连接对象
  2. 客户A获得15行SELECT ...FOR UPDATE。假设这些行被锁定。
  3. 客户B必须分别获取未被客户A锁定的其他15行,SELECT ..FOR UPDATE
  4. 当我测试这个场景时,我得到了客户端B也获得了15行客户端A.为什么会这样?我设置setAutoCommit(false)并且从不进行COMMITROLLBACK查询,因此连接永不提交并且锁定(例如,客户端A已经设置),永远不会被释放。

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

1 个答案:

答案 0 :(得分:1)

我很困惑,你试图锁定15行吗?如果你是,你就错过了:

START TRANSACTION

以下是交易文档的链接:

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