Dari Wikipedia (yang memiliki contoh bagus dan terperinci untuk ini):
Pembacaan yang tidak dapat diulang terjadi, ketika selama transaksi, sebuah baris diambil dua kali dan nilai di dalam baris tersebut berbeda di antara pembacaan.
dan
Pembacaan phantom terjadi ketika, selama transaksi, dua kueri identik dieksekusi, dan kumpulan baris yang dikembalikan oleh kueri kedua berbeda dari yang pertama.
Contoh sederhana:
- Pengguna A menjalankan kueri yang sama dua kali.
- Di antaranya, Pengguna B menjalankan transaksi dan melakukan.
- Bacaan yang tidak dapat diulang:Baris A yang ditanyakan pengguna A memiliki nilai yang berbeda untuk kedua kalinya.
- Bacaan hantu:Semua baris dalam kueri memiliki nilai yang sama sebelum dan sesudahnya, tetapi baris yang dipilih berbeda (karena B telah menghapus atau memasukkan beberapa). Contoh:
select sum(x) from table;
akan mengembalikan hasil yang berbeda meskipun tidak ada baris yang terpengaruh yang diperbarui, jika baris telah ditambahkan atau dihapus.
Pada contoh di atas, tingkat isolasi mana yang akan digunakan?
Tingkat isolasi yang Anda butuhkan bergantung pada aplikasi Anda. Ada biaya tinggi untuk tingkat isolasi yang "lebih baik" (seperti pengurangan konkurensi).
Dalam contoh Anda, Anda tidak akan memiliki pembacaan hantu, karena Anda hanya memilih dari satu baris (diidentifikasi dengan kunci utama). Anda dapat memiliki pembacaan yang tidak dapat diulang, jadi jika itu menjadi masalah, Anda mungkin ingin memiliki tingkat isolasi yang mencegahnya. Di Oracle, transaksi A juga dapat mengeluarkan SELECT FOR UPDATE, maka transaksi B tidak dapat mengubah baris sampai A selesai.