Bagikan melalui


Tingkat Isolasi Transaksi (ODBC)

Tingkat isolasi transaksi adalah ukuran sejauh mana isolasi transaksi berhasil. Secara khusus, tingkat isolasi transaksi didefinisikan oleh ada atau tidaknya fenomena berikut:

  • Bacaan KotorBacaan kotor terjadi ketika transaksi membaca data yang belum dilakukan. Misalnya, misalkan transaksi 1 memperbarui baris. Transaksi 2 membaca baris yang diperbarui sebelum transaksi 1 menerapkan pembaruan. Jika transaksi 1 mengembalikan perubahan, transaksi 2 akan telah membaca data yang dianggap tidak pernah ada sebelumnya.

  • Bacaan yang Tidak Dapat DipetikPembacaan yang tidak dapat dipetik terjadi ketika transaksi membaca baris yang sama dua kali tetapi mendapatkan data yang berbeda setiap kali. Misalnya, transaksi 1 membaca sebuah baris. Transaksi 2 memperbarui atau menghapus baris tersebut dan menerapkan pembaruan atau penghapusan. Jika transaksi 1 membaca ulang baris, ia akan mengambil nilai baris yang berbeda atau menemukan bahwa baris telah dihapus.

  • HantuPhantom adalah baris yang cocok dengan kriteria pencarian tetapi awalnya tidak terlihat. Misalnya, transaksi 1 membaca sekumpulan baris yang memenuhi beberapa kriteria pencarian. Transaksi 2 menghasilkan baris baru (melalui pembaruan atau sisipan) yang cocok dengan kriteria pencarian untuk transaksi 1. Jika transaksi 1 mengeksekusi ulang pernyataan yang membaca baris, ia akan mendapatkan sekumpulan baris yang berbeda.

Empat tingkat isolasi transaksi (sebagaimana didefinisikan oleh SQL-92) didefinisikan dalam hal fenomena ini. Dalam tabel berikut, "X" menandai setiap fenomena yang dapat terjadi.

Tingkat isolasi transaksi Bacaan kotor Pembacaan yang tidak dapat diulang Hantu
Baca tidak dikomit X X X
Pembacaan yang diterapkan -- X X
Pembacaan berulang -- -- X
Dapat Diserialkan -- -- --

Tabel berikut menjelaskan cara sederhana agar DBMS dapat menerapkan tingkat isolasi transaksi.

Penting

Sebagian besar DBMS menggunakan skema yang lebih kompleks daripada ini untuk meningkatkan konkurensi. Contoh-contoh ini disediakan hanya untuk tujuan ilustrasi. Secara khusus, ODBC tidak meresepkan bagaimana DBMS tertentu mengisolasi transaksi satu sama lain.

Isolasi transaksi Kemungkinan implementasi
Baca tidak dikomit Transaksi tidak terisolasi satu sama lain. Jika DBMS mendukung tingkat isolasi transaksi lainnya, DBMS mengabaikan mekanisme apa pun yang digunakannya untuk mengimplementasikan tingkat tersebut. Agar tidak berdampak buruk pada transaksi lain, transaksi yang berjalan pada tingkat mode Baca Tanpa Komit biasanya bersifat hanya-baca.
Pembacaan yang diterapkan Transaksi menunggu sampai baris yang dikunci tulis oleh transaksi lain dibuka kembali; ini mencegahnya membaca data "kotor".

Transaksi menyimpan kunci baca (jika hanya membaca baris) atau menulis kunci (jika memperbarui atau menghapus baris) pada baris saat ini untuk mencegah transaksi lain memperbarui atau menghapusnya. Transaksi melepaskan kunci baca saat berpindah dari baris saat ini. Ini menahan kunci tulis sampai dikomit atau dibatalkan.
Pembacaan berulang Transaksi menunggu hingga baris yang dikunci-tulis oleh transaksi lain dibuka; ini mencegahnya membaca data "kotor".

Transaksi menyimpan kunci baca pada semua baris yang dikembalikannya ke aplikasi dan menulis kunci pada semua baris yang disisipkan, diperbarui, atau dihapus. Misalnya, jika transaksi menyertakan pernyataan SQL SELECT * FROM Orders, transaksi akan mengunci baris saat aplikasi mengambilnya. Jika transaksi menyertakan pernyataan SQL DELETE FROM Orders WHERE Status = 'CLOSED', transaksi akan mengunci baris saat menghapusnya.

Karena transaksi lain tidak dapat memperbarui atau menghapus baris ini, transaksi saat ini menghindari pembacaan yang tidak dapat diulang. Transaksi melepaskan kuncinya ketika diterapkan atau digulung balik.
Dapat Diserialkan Transaksi menunggu hingga baris yang dikunci-tulis oleh transaksi lainnya dibebaskan; ini menghindari pembacaan data kotor.

Transaksi menyimpan kunci baca (jika hanya membaca baris) atau kunci tulis (jika dapat memperbarui atau menghapus baris) pada rentang baris yang terpengaruhnya. Misalnya, jika transaksi menyertakan pernyataan SQL SELECT * FROM Orders, rentangnya adalah seluruh tabel Pesanan; transaksi tersebut mengunci tabel dan tidak mengizinkan baris baru dimasukkan ke dalamnya. Jika transaksi menyertakan pernyataan SQL DELETE FROM Orders WHERE Status = 'CLOSED', rentangnya adalah semua baris dengan Status "CLOSED"; transaksi menulis-mengunci semua baris dalam tabel Pesanan dengan Status "TERTUTUP" dan tidak memungkinkan baris apa pun untuk dimasukkan atau diperbarui sedih sehingga baris yang dihasilkan memiliki Status "TERTUTUP".

Karena transaksi lain tidak dapat memperbarui atau menghapus baris dalam rentang, transaksi saat ini menghindari pembacaan tidak terulang. Karena transaksi lain tidak dapat menyisipkan baris apa pun dalam rentang, transaksi saat ini menghindari phantom apa pun. Transaksi melepaskan kuncinya ketika dikonfirmasi atau dibatalkan.

Penting untuk dicatat bahwa tingkat isolasi transaksi tidak memengaruhi kemampuan transaksi untuk melihat perubahannya sendiri; transaksi selalu dapat melihat perubahan apa pun yang mereka buat. Misalnya, transaksi mungkin terdiri dari dua pernyataan UPDATE , yang pertama menaikkan gaji semua karyawan sebesar 10 persen dan yang kedua menetapkan pembayaran karyawan mana pun dengan jumlah maksimum hingga jumlah tersebut. Ini berhasil sebagai satu transaksi hanya karena pernyataan UPDATE kedua dapat melihat hasil yang pertama.