大量のデータ セットをテーブルに格納/更新する PHP 関数を作成していますが、デッドロックが発生する可能性があります。Doctrine で失敗したトランザクションを再試行する方法を調べてみましたが、残念ながらオンラインで情報を見つけることができませんでした。私は最終的に次のコードを書きました
$retry = 0;
$done = false;
while (!$done and $retry < 3) {
try {
$this->entityManager->flush();
$done = true;
} catch (\Exception $e) {
sleep(1);
$retry++;
}
}
if ($retry == 3) {
throw new Exception(
"[Exception: MySQL Deadlock] Too many people accessing the server at the same time. Try again in few minutes"
);
}
私の質問:このアプローチがデータベースに重複を挿入する可能性はありますか? もしそうなら、どうすれば Doctrine にトランザクションをロールバックさせることができますか?