- Bacaan kotor : baca data UNCOMMITED dari transaksi lain
- Bacaan yang tidak dapat diulang : baca data COMMITTED dari
UPDATE
kueri dari transaksi lain
- Phantom bertuliskan : baca data COMMITTED dari
INSERT
atauDELETE
permintaan dari transaksi lain
Catatan : HAPUS pernyataan dari transaksi lain, juga memiliki probabilitas yang sangat rendah untuk menyebabkan pembacaan yang tidak dapat diulang dalam kasus tertentu. Sayangnya, hal ini terjadi ketika pernyataan DELETE menghapus baris yang sama dengan yang ditanyakan oleh transaksi Anda saat ini. Tetapi ini adalah kasus yang jarang, dan jauh lebih tidak mungkin terjadi dalam database yang memiliki jutaan baris di setiap tabel. Tabel yang berisi data transaksi biasanya memiliki volume data tinggi di lingkungan produksi apa pun.
Kami juga dapat mengamati bahwa UPDATES mungkin merupakan pekerjaan yang lebih sering dalam kebanyakan kasus penggunaan daripada INSERT atau DELETES yang sebenarnya (dalam kasus seperti itu, bahaya pembacaan yang tidak dapat diulang hanya tinggal - pembacaan hantu tidak mungkin dalam kasus tersebut). Inilah sebabnya mengapa UPDAT diperlakukan berbeda dari INSERT-DELETE dan anomali yang dihasilkan juga dinamai berbeda.
Ada juga biaya pemrosesan tambahan yang terkait dengan penanganan untuk INSERT-DELETEs, daripada hanya menangani UPDATES.
- READ_UNCOMMITTED mencegah apa pun. Ini adalah tingkat isolasi nol
- READ_COMMITTED mencegah hanya satu, yaitu Kotor dibaca
- REPEATABLE_READ mencegah dua anomali: Pembacaan kotor dan pembacaan tidak dapat diulang
- SERIALIZABLE mencegah ketiga anomali: Pembacaan kotor, Pembacaan tidak dapat diulang dan pembacaan Phantom
Lalu mengapa tidak mengatur transaksi SERIALIZABLE setiap saat? Nah, jawaban untuk pertanyaan di atas adalah: Pengaturan SERIALIZABLE membuat transaksi sangat lambat , yang lagi-lagi tidak kita inginkan.
Bahkan konsumsi waktu transaksi dalam tingkat berikut:
SERIALIZABLE > REPEATABLE_READ > READ_COMMITTED > READ_UNCOMMITTED
Jadi pengaturan READ_UNCOMMITTED adalah yang tercepat .
Ringkasan
Sebenarnya kita perlu menganalisis use case dan memutuskan tingkat isolasi sehingga kita mengoptimalkan waktu transaksi dan juga mencegah sebagian besar anomali.
Perhatikan bahwa database secara default memiliki pengaturan REPEATABLE_READ.