Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thử lại giao dịch sau khi gặp sự cố bằng Doctrine?

Một deadlock trả về lỗi 1213 mà bạn nên xử lý ở phía máy khách

Lưu ý rằng bế tắc và chờ khóa là những thứ khác nhau. Trong lúc bế tắc, không có giao dịch nào "thất bại":cả hai đều có tội. Không có gì đảm bảo cái nào sẽ được khôi phục.

Bạn phải sử dụng rollback , mã kiểu của bạn sẽ chèn trùng lặp. ví dụ bạn nên:

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

    }

}

Hy vọng sự giúp đỡ này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL nghe thông báo tương đương

  2. Tính tổng một cột được phân tách bằng dấu phẩy trong MySQL 4 (không phải 5)

  3. Làm thế nào để truy xuất nhiều hàng từ thủ tục được lưu trữ trong MySQL?

  4. PHP MySQL SQL parser (CHÈN và CẬP NHẬT)

  5. Lưu trữ GUID trong MySQL từ C #