Aplikasi kami meluncurkan kueri INSERT ke Database MySQL untuk menambahkan catatan. Saya ingin tahu apakah rekaman mendapatkan komitmen otomatis atau tidak. Jika saya menjalankan perintah ROLLBACK, kapan database melakukan rollback? Apakah ROLLBACK dapat dilakukan setelah KOMIT?
13
Jawaban:
Jawaban untuk pertanyaan Anda tergantung pada apakah Anda dalam suatu transaksi yang akan mencakup lebih dari satu pernyataan. (Anda telah menandai pertanyaan dengan InnoDB, jawabannya akan berbeda dengan MyISAM.)
Dari manual referensi: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Jadi ya, secara default, jika Anda hanya menggunakan
INSERT
, catatan yang Anda masukkan akan dikomit, dan tidak ada gunanya mencoba mengembalikannya. (Ini secara efektif sama dengan membungkus setiap pernyataan antaraBEGIN
danCOMMIT
.)Namun, jika Anda berurusan dengan transaksi secara eksplisit, Anda harus menggunakannya
COMMIT
untuk menyimpan catatan, tetapi Anda juga dapat menggunakannyaROLLBACK
.Anda dapat memulai transaksi secara eksplisit dengan menggunakan
START TRANSACTION
(atauBEGIN
). Ini tidak tergantung padaautocommit
pengaturan (diaktifkan secara default):Atau, jika
autocommit=0
, saya pikir pernyataan apa pun yang mengikuti akhir transaksi, akan memulai transaksi (tetapi Anda masih dapat menggunakanSTART TRANSACTION
secara eksplisit); setidaknya itulah cara saya menafsirkan ini :Lebih khusus "cara lain untuk memulai transaksi" tampaknya menyiratkan bahwa pengaturan "autocommit = 0" sudah cukup untuk memulai transaksi (setidaknya tepat sebelum setiap pernyataan pada awal sesi atau yang mengikuti a
COMMIT
/ROLLBACK
). Saya akan menyarankan untuk menggunakanBEGIN
atauSTART TRANSACTION
tetap secara eksplisit meskipunautocommit=0
, karena dapat membuatnya lebih jelas untuk melihat kapan transaksi dimulai atau berakhir.(Bagaimana Anda memulai transaksi mungkin tergantung pada cara aplikasi Anda menggunakan MySQL.)
sumber
Secara default, InnoDB diatur ke autocommit = 1 atau ON . Setelah berkomitmen, mereka tidak dapat dibatalkan .
Anda harus melakukan salah satu dari dua hal untuk menonaktifkannya di masa mendatang:
OPSI 1: Tambahkan ini ke /etc/my.cnf dan restart mysql
OPSI 2: Lakukan salah satu dari ini di DB Conenction terbuka sebelum memulai SQL yang bermakna
Di bawah dua opsi ini, Anda harus melakukan COMMIT manual atau ROLLBACK manual .
CAVEAT
Jika tabelnya adalah MyISAM, maka penjelasannya lebih sederhana. Karena tidak ada transaksi untuk mesin penyimpanan MyISAM, semua INSERT, UPDATE, dan DELETE yang dijalankan adalah permanen. Tidak ada pengembalian apa pun.
sumber