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

Jeśli transakcja PHP PDO nie powiedzie się, czy muszę jawnie wycofać ()?

Jeśli nie commit nie rollback otwarta transakcja i nie jest commited nigdzie później w skrypcie nie zostanie commited (z punktu widzenia silnika bazy danych) , i zostanie automatycznie wycofany na końcu skryptu.


Nadal, ja (no, prawie) zawsze commit lub rollback jawnie transakcje, które otwieram, więc :

  • Nie ma ryzyka błędu (np. popełnienia „pomyłki” w dalszej części skryptu)
  • Kod jest łatwiejszy do odczytania / zrozumienia :gdy widzimy $db->rollback() , wie, że na pewno chcę wycofać transakcję, i nie musi myśleć „czy naprawdę chciał wycofać, czy o czymś zapomniał? i co dalej w skrypcie?


Silnik bazy danych nie "widzi" wyjątku PDOException :jest on zgłaszany przez PHP w różnych warunkach - ale baza danych sama niczego nie wycofuje :

  • albo transakcja została zatwierdzona
  • lub wycofane
  • lub nie jest to wyraźnie zatwierdzone ani wycofane — co oznacza, że ​​nie zostało zatwierdzone — co oznacza, że ​​to, co zostało zmodyfikowane, nie jest „naprawdę” modyfikowane



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj POINT MySQL na tekst w PHP

  2. INSERT ... SELECT, InnoDB i blokowanie

  3. Wiązanie zmiennej parametr/wynik z przygotowanymi oświadczeniami

  4. MySQL InnoDB blokuje się na połączonych wierszach

  5. Jak zmienić akcję dla klucza obcego?