Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak ponowić transakcję po zakleszczeniu za pomocą Doctrine?

Zakleszczenie zwraca błąd 1213, który należy przetworzyć po stronie klienta

Zauważ, że zakleszczenie i oczekiwanie na blokadę to dwie różne rzeczy. W impasie nie ma transakcji „nieudanej”:obaj są winni. Nie ma gwarancji, który z nich zostanie wycofany.

Musisz użyć rollback , Twój kod stylu wstawi duplikat. na przykład powinieneś:

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

    }

}

Mam nadzieję, że ta pomoc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przewodnik po projektowaniu bazy danych dla ankiet i ankiet w MySQL

  2. Sprawdź i zoptymalizuj bazę danych MySQL automatycznie za pomocą Crontab/Cron

  3. MYSQL — Wybierz określoną wartość z pobranej tablicy

  4. Migracja MySQL do SQL Server

  5. Wybieraj użytkowników tylko z jednej tabeli, jeśli nie z innej