gpt4 book ai didi

mysql - InnoDB 中行锁定所需的快速解释

转载 作者:行者123 更新时间:2023-11-29 14:14:44 25 4
gpt4 key购买 nike

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

当超过 1 个客户端读取数据库时,我需要提高数据库的读取效率,而不是所有客户端都获得相同的行。我对表使用 InnoDB 引擎,执行诸如 SELECT...FOR UPDATE 之类的查询,并且不使用 SHARED MODE

我需要解释该流程在以下场景中的行为方式:

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

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

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

最佳答案

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

START TRANSACTION

以下是交易文档的链接:

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

关于mysql - InnoDB 中行锁定所需的快速解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12859901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com