Itu semua tergantung pada ISOLATION LEVEL
Anda telah mengatur.
Anda dapat melihat mana yang telah Anda atur dengan kueri ini:
select @@global.tx_isolation, @@session.tx_isolation;
Sebelum menjelaskan tingkat isolasi yang berbeda, izinkan saya menjelaskan masalah mana yang mereka coba hindari:
-
Bacaan kotor :Data transaksi yang belum selesai dibaca oleh transaksi lain.
-
Pembaruan yang hilang :Dua transaksi memodifikasi entri dalam tabel secara paralel. Ketika kedua transaksi selesai, hanya satu modifikasi yang diterapkan.
-
Bacaan yang tidak dapat diulang :Pembacaan berulang menghasilkan hasil yang berbeda.
-
Bacaan hantu :Selama transaksi, transaksi lain menambah atau menghapus entri tabel.
Sekarang untuk tingkat isolasi yang berbeda.
Baca Tanpa Komitmen :
Dengan operasi baca level isolasi ini mengabaikan segala jenis kunci, oleh karena itu salah satu masalah yang disebutkan di atas dapat terjadi.
Baca Berkomitmen :
Tingkat isolasi ini menetapkan kunci tulis untuk seluruh transaksi pada objek yang harus dimodifikasi. Kunci baca hanya disetel saat membaca data. Oleh karena itu, pembacaan yang tidak dapat diulang dan pembacaan hantu dapat terjadi.
Baca yang Dapat Diulang :
Dengan tingkat isolasi ini dipastikan, bahwa operasi baca yang berulang selalu menghasilkan hasil yang sama ketika parameternya sama. Kunci diatur untuk operasi baca dan tulis selama total durasi transaksi. Oleh karena itu, hanya pembacaan hantu yang dapat terjadi.
Dapat dibuat serial :
Level isolasi tertinggi menjamin, bahwa hasil dari transaksi yang berjalan paralel adalah sama seperti jika transaksi akan berjalan satu demi satu. Sebagian besar database tidak benar-benar menjalankan transaksi tersebut satu demi satu, itu akan menjadi kerugian kinerja yang terlalu besar. Oleh karena itu dapat terjadi, bahwa satu transaksi dibatalkan. MySQL misalnya menyadari hal ini dengan MVCC (Multi-Version Concurrency Control). Google itu, jika Anda ingin tahu lebih banyak. Terlalu banyak untuk jawaban ini.
Secara keseluruhan tabel ini menjelaskannya juga:
| Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read
---------------------------------------------------------------------------------
Read Uncommitted | possible | possible | possible | possible
Read Committed | impossible | impossible | possible | possible
Repeatable Read | impossible | impossible | impossible | possible
Serializable | impossible | impossible | impossible | impossible
- Dalam entri manual ini adalah beberapa info lebih lanjut tentangnya dan cara menyetel tingkat isolasi.
Semua ini hanyalah teori untuk sistem manajemen basis data relasional. Karena MySQL menggunakan MVCC (kontrol konkurensi multi versi), pembacaan phantom tidak terjadi saat menggunakan InnoDB dan tingkat isolasi baca berulang .
Dari buku petunjuk
: