Saya kira Anda menggunakan tabel InnoDB dan bukan tabel MyISAM. Seperti yang dijelaskan dalam model transaksi InnoDB , semua pertanyaan Anda (termasuk SELECT) berlangsung di dalam transaksi.
Ketika AutoCommit
aktif, transaksi dimulai untuk setiap kueri dan jika berhasil, transaksi dilakukan secara implisit (jika gagal, perilaku mungkin berbeda, tetapi transaksi dijamin berakhir). Anda dapat melihat komit implisit di binlog MySQL. Dengan menyetel AutoCommit
ke false, Anda diharuskan untuk mengelola transaksi sendiri.
Tingkat isolasi transaksi default adalah BACA BERULANG , yang berarti bahwa semua SELECT
kueri akan membaca snapshot yang sama (snapshot yang dibuat saat transaksi dimulai).
Selain solusi yang diberikan dalam jawaban lain (ROLLBACK
sebelum mulai membaca) berikut adalah beberapa solusi:
Anda dapat memilih tingkat isolasi transaksi lain, seperti BACA BERKOMITMEN
, yang membuat SELECT
. Anda kueri membaca snapshot baru setiap saat.
Anda juga dapat meninggalkan AutoCommit
ke true (pengaturan default) dan mulai transaksi Anda sendiri dengan mengeluarkan BEGIN WORK
. Ini akan menonaktifkan sementara AutoCommit
perilaku sampai Anda mengeluarkan COMMIT
atau ROLLBACK
pernyataan setelah itu setiap kueri mendapatkan transaksinya sendiri lagi (atau Anda memulai yang lain dengan BEGIN WORK
).
Saya, secara pribadi, akan memilih metode yang terakhir, karena tampaknya lebih elegan.