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

Komit dan transaksi MySQL

Di InnoDB, Anda tidak perlu secara eksplisit memulai atau mengakhiri transaksi untuk satu kueri jika Anda belum mengubah pengaturan default autocommit, yaitu "on". Jika komit otomatis aktif, InnoDB secara otomatis menyertakan setiap kueri SQL dalam suatu transaksi, yang setara dengan START TRANSACTION; query; COMMIT; .

Jika Anda secara eksplisit menggunakan START TRANSACTION di InnoDB dengan autocommit aktif, lalu setiap kueri dijalankan setelah START TRANSACTION pernyataan akan baik semua dieksekusi, atau semuanya akan gagal. Ini berguna di lingkungan perbankan, misalnya:jika saya mentransfer $500 ke rekening bank Anda, operasi itu hanya akan berhasil jika jumlahnya telah dikurangi dari saldo bank saya dan ditambahkan ke rekening Anda. Jadi dalam hal ini, Anda akan menjalankan sesuatu seperti

START TRANSACTION;
UPDATE customers SET balance = balance - 500 WHERE customer = 'Daan';
UPDATE customers SET balance = balance + 500 WHERE customer = 'Dennis';
COMMIT;

Ini memastikan bahwa kedua kueri akan berhasil dijalankan, atau tidak sama sekali, tetapi bukan hanya satu. Postingan ini memiliki lebih banyak tentang kapan Anda harus menggunakan transaksi.

Di InnoDB, Anda sangat jarang harus mengunci seluruh tabel; InnoDB, tidak seperti MyISAM, mendukung penguncian tingkat baris. Ini berarti klien tidak harus mengunci seluruh tabel, memaksa klien lain untuk menunggu. Klien hanya boleh mengunci baris yang benar-benar mereka butuhkan, memungkinkan klien lain untuk terus mengakses baris yang mereka butuhkan.

Anda dapat membaca lebih lanjut tentang transaksi InnoDB di sini . Pertanyaan Anda tentang kebuntuan dijawab di bagian 14.2.8.8 dan 14.2.8.9 dari dokumen. Jika kueri gagal, driver MySQL Anda akan menampilkan pesan kesalahan yang menunjukkan alasannya; aplikasi Anda kemudian harus menerbitkan ulang kueri jika diperlukan.

Terakhir, dalam kode contoh Anda, Anda menggunakan mysql_query . Jika Anda sedang menulis kode baru, harap berhenti menggunakan mysql_ yang lama, lambat, dan tidak digunakan lagi perpustakaan untuk PHP dan gunakan mysqli_ atau PDO sebagai gantinya :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengurutkan kolom string yang berisi angka dalam SQL?

  2. Bagaimana cara mengekspor dan mengimpor file .sql dari baris perintah dengan opsi?

  3. Bisakah kardinalitas berbeda untuk indeks duplikat di mysql?

  4. membaca gambar BLOB dari database MySQL

  5. Bagaimana cara memperkirakan waktu kueri SQL?