sql >> Databasteknik >  >> RDS >> Mysql

Hur försöker man om transaktionen efter ett dödläge med Doctrine?

Ett dödläge returnerar fel 1213 som du bör bearbeta på klientsidan

Observera att låsning och låsning är olika saker. I ett dödläge finns det ingen "misslyckad" transaktion:de är båda skyldiga. Det finns ingen garanti för vilken som kommer att återställas.

Du måste använda rollback , kommer din stilkod att infoga dubblett. till exempel bör du :

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

    }

}

Hoppas detta hjälper.



  1. Hur man hittar pg_config sökväg

  2. Uppdatera flera rader med kända nycklar utan att infoga nya rader om icke-existerande nycklar hittas

  3. Hur Strftime()-funktionen fungerar i SQLite

  4. GreenDAO stöder flera relationer mellan tabeller