情况是这样的。我有两个客户端程序连接到服务器上的同一个 mysql 数据库。当我以下列方式对表运行操作时
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;
表 1 被阻塞,直到完成事务的客户端断开连接才会解锁。在第一次启动事务的客户端上,该表也是可写的,但从另一个客户端是只读的。我给了 msyql 帐户所有的权限没有记错,我也尝试在事务操作后发送一个 UNLOCK 表,但它没有帮助。我仔细检查了程序的源代码,以确保我没有忘记打开一些 ZQuery,但没有任何顾忌。为什么提交不为其他客户端解锁 table1?
我还以相同的行为尝试了 tiReadCommited 和 tiUnreadCommited。我还尝试将 Zeos 升级到 7.2 版并将 mysql 更改为 5 版,结果相同。啊,我使用 InnoDB。