Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Penggunaan yang tepat dari php mysqli autocommit dan rollback

Anda menggunakannya ketika Anda memiliki serangkaian pernyataan sql yang harus dilakukan bersama-sama untuk menjaga konsistensi dalam database Anda. Pikirkan memanggil komit sebagai menetapkan titik simpan dalam game. Setiap kali Anda memanggil rollback, Anda membatalkan semua yang telah dilakukan hingga komit sebelumnya.

Bayangkan situasi di mana Anda perlu menyimpan faktur di tabel faktur, detail di tabel invoice_details, dan pembayaran di tabel pembayaran. Untuk menjaga konsistensi, Anda perlu memastikan bahwa ini semua dilakukan atau tidak ada yang dilakukan. Jika Anda harus menambahkan faktur dan detailnya dan kemudian terjadi kegagalan dalam memasukkan pembayaran, maka database Anda dibiarkan dalam keadaan tidak konsisten.

Biasanya ini dilakukan dengan menggunakan blok coba/tangkap seperti ini:

try {
    $dbconnect->autocommit(false);

    $stmt = $dbconnect->prepare("INSERT INTO `invoices`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val1,$val2);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `invoice_details`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val3,$val4);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `payments`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val5,$val6);
    $stmt->execute();

    $dbconnect->commit();
} catch(Exception $e){
    // undo everything that was done in the try block in the case of a failure.
    $dbconnect->rollback();

    // throw another exception to inform the caller that the insert group failed.
    throw new StorageException("I couldn't save the invoice");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengkloning database MySQL

  2. MySQL:Bagaimana cara menyalin baris, tetapi mengubah beberapa bidang?

  3. MySQL MAX_JOIN_SIZE kesalahan

  4. MySQL Menghitung nilai yang berbeda dari satu kolom

  5. Menggunakan Java untuk membuat koneksi aman ke MySQL Amazon RDS (SSL/TLS)