sql >> Databáze >  >> RDS >> Mysql

Jak zopakovat transakci po uváznutí pomocí Doctrine?

Zablokování vrátí chybu 1213, kterou byste měli zpracovat na straně klienta

Všimněte si, že zablokování a čekání na zámek jsou různé věci. V patové situaci neexistuje žádná „neúspěšná“ transakce:vinni jsou oba. Neexistuje žádná záruka, která z nich bude vrácena zpět.

Musíte použít rollback , váš kód stylu vloží duplikát. například byste měli:

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

    }

}

Doufám, že to pomůže.



  1. pád aplikace na JSON jparser vygeneruje požadavek http

  2. Problémy s heslem MySQL (mac OS X Lion)

  3. MySQL Great Circle Distance (Haversine vzorec)

  4. čárkami oddělený seznam jako jeden řetězec, T-SQL