1

MySQL データベースにアクセスする 2 つのアプリケーションで UniDAC (Devart) を使用しています。1 つのアプリケーションで大量の更新操作を行っているときに、別のアプリケーションで "#40001 ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してください" というエラーが発生することがあります。これに対処するためにMySQLのヒントを読んだ後、彼らはトランザクションを再試行するように言いました. 私の質問は、Delphi でこれを行う最善の方法を知ることです。私はこれをやっています:

transaction_completed_ok:= False;
repeat
  try
    my_db.StartTransaction;
    (... do the inserts)
    my_db.Commit;
    transaction_completed_ok:= True;
  except
    my_db.Rollback;
    Sleep(1000);
  end;
until transaction_completed_ok;

両方のアプリですべてのトランザクションに対してこれを行うことは、問題に対処する有効な方法ですか? 誰でも最善の方法を共有できますか? どんな助けでも大歓迎です。

4

1 に答える 1