sql >> Database >  >> RDS >> Mysql

Hoe een transactie opnieuw proberen na een impasse met Doctrine?

Een deadlock retourneert fout 1213 die u aan de clientzijde moet verwerken

Merk op dat een deadlock en lock wait verschillende dingen zijn. In een impasse is er geen "mislukte" transactie:ze zijn allebei schuldig. Er is geen garantie welke zal worden teruggedraaid.

U moet rollback . gebruiken , uw stijlcode zal duplicaat invoegen. u moet bijvoorbeeld:

$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++;

    }

}

Ik hoop dat dit helpt.



  1. MySQL-transactie over twee databases op verschillende servers

  2. .Net ORM dat goed werkt met MySQL

  3. Hoe te bestellen op draaitabelgegevens in Eloquent ORM van Laravel

  4. Een databasemodel voor een online-enquête. Deel 2