Delphi 2007 ZeosLib 6.6 Mysql 4.1 来自其他客户端的事务锁 table

Delphi 2007 ZeosLib 6.6 Mysql 4.1 Transaction lock table from other client

情况是这样的。我有两个客户端程序连接到服务器上的同一个 mysql 数据库。当我 运行 按以下方式对 table 进行操作时

        ZCon.TransactIsolationlevel := tiSerializable;
        ZCon.AutoCommit := true;
        ZCon.StartTransaction;
        try
          ZQGeneral.Close;
          ZQGeneral.SQL.Clear;

          ZQGeneral.SQL.Add('UPDATE table1 SET field1 = 1 WHERE id = 2');
          ZQGeneral.ExecSQL;
          ZQGeneral.Close;


          ZCon.Commit;
          ZCon.TransactIsolationlevel := tinone;
          ZCon.AutoCommit := False;

        except
          ZCon.Rollback;
          ZCon.TransactIsolationlevel := tinone;
          ZCon.AutoCommit := False;
        end;

table1 被阻塞,直到客户端断开连接完成交易后才会解锁。在首先启动事务的客户端上,table 也是可写的,但在另一个客户端上是只读的。 我给了msyql帐户所有权限没有记错,我也尝试在交易操作后发送UNLOCK tables但它没有帮助。 我仔细检查了程序的源代码以确保我没有忘记一些 ZQuery 打开但没有任何顾忌。 为什么提交不为其他客户端解锁 table1?

我还尝试了具有相同行为的 tiReadCommited 和 tiUnreadCommited。 我还尝试将 Zeos 升级到版本 7.2 并将 mysql 更改为版本 5,结果相同。啊,我用的是InnoDB

我找到了解决方案。在连接到 mysql 之前将 autocommit 设置为 true 并将 transactisoltionlevel 设置为 tiserializable 并且在运行时不更改它,然后在需要时使用隐式 starttransaction。