Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich die Transaktion nach einem Deadlock mit Doctrine wiederholen?

Ein Deadlock gibt den Fehler 1213 zurück, den Sie auf der Client-Seite bearbeiten sollten

Beachten Sie, dass ein Deadlock und ein Lock-Wait verschiedene Dinge sind. In einem Deadlock gibt es keine "fehlgeschlagene" Transaktion:Sie sind beide schuldig. Es gibt keine Garantie, welche zurückgesetzt wird.

Sie müssen rollback verwenden , wird Ihr Stilcode doppelt eingefügt. zum Beispiel sollten Sie:

$retry = 0;

$done = false;


$this->entityManager->getConnection()->beginTransaction(); // suspend auto-commit

while (!$done and $retry < 3) {

    try {

        $this->entityManager->flush();

        $this->entityManager->getConnection()->commit(); // commit if succesfull

        $done = true;

    } catch (\Exception $e) {

        $this->entityManager->getConnection()->rollback(); // transaction marked for rollback only

        $retry++;

    }

}

Hoffe, das hilft.