sql >> Database teknologi >  >> RDS >> Mysql

PHP + MySQL transaktionseksempler

Den idé, jeg generelt bruger, når jeg arbejder med transaktioner, ser sådan ud (semi-pseudo-kode) :

try {
    // First of all, let's begin a transaction
    $db->beginTransaction();
    
    // A set of queries; if one fails, an exception should be thrown
    $db->query('first query');
    $db->query('second query');
    $db->query('third query');
    
    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed, and we can commit the transaction
    $db->commit();
} catch (\Throwable $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
    throw $e; // but the error must be handled anyway
}

Bemærk, at med denne idé, hvis en forespørgsel mislykkes, skal der gives en undtagelse:
  • PDO kan gøre det, afhængigt af hvordan du konfigurerer det
  • ellers, med en anden API, skal du muligvis teste resultatet af den funktion, der bruges til at udføre en forespørgsel, og selv kaste en undtagelse.

Desværre er der ingen magi involveret. Du kan ikke bare placere en instruktion et sted og få transaktioner udført automatisk:du skal stadig angive, hvilken gruppe af forespørgsler, der skal udføres i en transaktion.

For eksempel vil du ofte have et par forespørgsler før transaktionen (før begin ) og endnu et par forespørgsler efter transaktionen (efter enten commit eller rollback ) og du vil have disse forespørgsler udført, uanset hvad der skete (eller ej) i transaktionen.



  1. Gruppering med en sagserklæring

  2. Find max værdi og vis tilsvarende værdi fra andet felt i SQL server

  3. Top 10 bedste praksis i MySQL

  4. Forskellen mellem #temptable og ##Temptable?