我正在编写一个 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 回滚交易?