Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apa perbedaan antara Baca yang Tidak Dapat Diulang dan Baca Phantom?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Fungsi yang Mengembalikan Detik dari Nilai Datetime di Oracle

  2. Kesalahan memuat oci8.so dengan server Ubuntu 17.04 php 7 dan Apache2

  3. Apakah batasan kunci asing memengaruhi transformasi kueri di Oracle?

  4. Berapa ukuran maksimal VARCHAR2 di PL/SQL dan SQL?

  5. Cara terbaik untuk melakukan penyisipan multi-baris di Oracle?