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

Perbedaan antara SET autocommit=1 dan MULAI TRANSAKSI di mysql (Apakah saya melewatkan sesuatu?)

Menyadari penanganan transaksi (komit otomatis, eksplisit dan implisit) untuk database Anda dapat menyelamatkan Anda dari keharusan memulihkan data dari cadangan.

Transaksi mengontrol pernyataan manipulasi data untuk memastikannya bersifat atomik. Menjadi "atomik" berarti transaksi terjadi, atau tidak. Satu-satunya cara untuk memberi sinyal penyelesaian transaksi ke database adalah dengan menggunakan COMMIT atau ROLLBACK pernyataan (per ANSI-92, yang sayangnya tidak menyertakan sintaks untuk membuat/memulai transaksi sehingga khusus vendor). COMMIT menerapkan perubahan (jika ada) yang dibuat dalam transaksi. ROLLBACK mengabaikan tindakan apa pun yang terjadi dalam transaksi - sangat diinginkan ketika pernyataan UPDATE/DELETE melakukan sesuatu yang tidak diinginkan .

Biasanya pernyataan DML (Sisipkan, Perbarui, Hapus) individu dilakukan dalam transaksi komit otomatis - pernyataan tersebut dilakukan segera setelah pernyataan berhasil diselesaikan. Yang berarti tidak ada kesempatan untuk mengembalikan database ke status sebelum pernyataan dijalankan dalam kasus seperti milik Anda. Ketika terjadi kesalahan, satu-satunya opsi pemulihan yang tersedia adalah merekonstruksi data dari cadangan (asalkan ada). Di MySQL, komit otomatis adalah pada secara default untuk InnoDB - MyISAM tidak mendukung transaksi. Itu dapat dinonaktifkan dengan menggunakan:

SET autocommit = 0

Transaksi eksplisit adalah ketika pernyataan dibungkus dalam blok kode transaksi yang ditentukan secara eksplisit - untuk MySQL, itu START TRANSACTION . Ini juga membutuhkan COMMIT yang dibuat secara eksplisit atau ROLLBACK pernyataan di akhir transaksi. Transaksi bertingkat berada di luar cakupan topik ini.

Transaksi implisit sedikit berbeda dari transaksi eksplisit. Transaksi implisit tidak memerlukan pendefinisian transaksi secara eksplisit. Namun, seperti transaksi eksplisit, mereka memerlukan COMMIT atau ROLLBACK pernyataan yang akan diberikan.

Kesimpulan

Transaksi eksplisit adalah solusi paling ideal - mereka memerlukan pernyataan, COMMIT atau ROLLBACK , untuk menyelesaikan transaksi, dan apa yang terjadi dinyatakan dengan jelas untuk dibaca orang lain jika diperlukan. Transaksi implisit diperbolehkan jika bekerja dengan database secara interaktif, tetapi COMMIT pernyataan seharusnya hanya ditentukan setelah hasil telah diuji &benar-benar ditentukan untuk menjadi valid.

Itu berarti Anda harus menggunakan:

SET autocommit = 0;

START TRANSACTION;
  UPDATE ...;

...dan hanya gunakan COMMIT; ketika hasilnya benar.

Yang mengatakan, pernyataan UPDATE dan DELETE biasanya hanya mengembalikan jumlah baris yang terpengaruh, bukan detail spesifik. Ubah pernyataan tersebut menjadi pernyataan SELECT &tinjau hasilnya untuk memastikan kebenaran sebelumnya untuk mencoba pernyataan UPDATE/DELETE.

tambahan

Pernyataan DDL (Bahasa Definisi Data) secara otomatis berkomitmen - mereka tidak memerlukan pernyataan COMMIT. IE:Tabel, indeks, prosedur tersimpan, database, dan pernyataan pembuatan atau perubahan tampilan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menghapus Karakter Utama yang Tidak Diinginkan dari String di MySQL

  2. Dapatkan nilai AUTO_INCREMENT saat ini untuk tabel apa pun

  3. Memanggil prosedur tersimpan dengan parameter Keluar menggunakan PDO

  4. Apakah ada SQLite yang setara dengan DESCRIBE [tabel] MySQL?

  5. Permintaan tabel pivot MySQL dengan kolom dinamis