状況はこれです。私は、サーバー上の同じmysqlデータベースに接続する2つのクライアントプログラムを持っています。私はテーブルの1以下の方法Delphi 2007 ZeosLib 6.6 Mysql 4.1他のクライアントからのトランザクションロックテーブル
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;
のテーブルで操作を実行するとブロックされ、トランザクションを完了したクライアントの接続が切断されるまで、ロックを解除しません。最初にトランザクションを開始したクライアントでは、テーブルも書き込み可能ですが、他のクライアントからは読み取り専用です。 私はmsyqlアカウントに間違いなくすべての特権を与えました、私はまた、トランザクション操作の後にUNLOCKテーブルを送信しようとしましたが、それは助けにはなりませんでした。 プログラムのソースを再確認して、開いているZQueryを忘れていないことを確認しました。 他のクライアント用にtable1のロックを解除しないのはなぜですか?
また、同じ動作でtiReadCommitedとtiUnreadCommitedを試しました。 また、Zeosをバージョン7.2にアップグレードしようとしましたが、同じ結果でバージョン5のmysqlを変更しました。ああ、私はInnoDBを使っています。