Rumah  >  Artikel  >  pangkalan data  >  Apakah tahap pengasingan transaksi mysql?

Apakah tahap pengasingan transaksi mysql?

青灯夜游
青灯夜游asal
2023-01-04 16:37:5915825semak imbas

Terdapat empat tahap pengasingan transaksi: 1. Baca Tidak Komited (baca tidak komited), yang membenarkan pembacaan perubahan data tidak komited, yang boleh menyebabkan bacaan kotor, bacaan tidak boleh berulang dan bacaan hantu. 2. Read Committed (Read Committed) membenarkan membaca data yang telah diserahkan oleh transaksi serentak, yang boleh mengelakkan bacaan kotor, tetapi boleh menyebabkan bacaan tidak boleh berulang dan hantu. 3. Bacaan Boleh Ulang (repeatable read), hasil bacaan berbilang medan yang sama adalah konsisten. 4. Boleh bersiri (serializable).

Apakah tahap pengasingan transaksi mysql?

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

1.

Transaksi ialah satu set operasi logik, sama ada kesemuanya dilaksanakan atau tiada satu pun daripadanya dilaksanakan.

Berangan yang paling klasik dan sering disebut dalam perniagaan ialah pindahan wang melalui bank. Sebagai contoh, jika Xiao Ming ingin memindahkan 1,000 yuan kepada Xiao Hong, pemindahan ini akan melibatkan dua operasi utama: mengurangkan baki Xiao Ming sebanyak 1,000 yuan dan mengurangkan baki Xiao Hong sebanyak 1,000 yuan. Jika ralat tiba-tiba berlaku antara kedua-dua operasi ini, menyebabkan baki Xiao Ming berkurangan tetapi baki Xiao Hong tidak meningkat, keadaan ini pastinya tidak dibenarkan. Urus niaga adalah untuk memastikan kedua-dua operasi utama ini sama ada berjaya atau tidak berjaya.

2. Ciri-ciri Transaksi (ACID)

  • **Atomicity:* *The unit pelaksanaan terkecil transaksi, tiada pembahagian dibenarkan. Keatomisan urus niaga memastikan bahawa tindakan sama ada dilaksanakan atau tiada langsung.
  • **Ketekalan:**Data kekal konsisten sebelum dan selepas melaksanakan transaksi. Sebagai contoh, dalam perniagaan pemindahan wang, jumlah amaun pemindah dan penerima hendaklah kekal tidak berubah tanpa mengira sama ada transaksi itu berjaya atau tidak.
  • ** Pengasingan: ** Apabila mengakses pangkalan data secara serentak, transaksi pengguna tidak boleh dipengaruhi oleh transaksi lain dan pangkalan data adalah bebas antara transaksi serentak.
  • **Kegigihan:**Selepas transaksi dilakukan, perubahannya kepada data dalam pangkalan data adalah berterusan dan tidak boleh terjejas walaupun pangkalan data gagal.

3. Masalah yang disebabkan oleh transaksi serentak

Dalam aplikasi biasa, berbilang transaksi berjalan serentak, selalunya Memanipulasi data yang sama untuk menyelesaikan tugas masing-masing (berbilang pengguna yang beroperasi pada data yang sama). Walaupun konkurensi adalah perlu, ia mungkin menyebabkan masalah berikut:

  • **Bacaan kotor:** Apabila transaksi mengakses data dan telah mengubah suainya, tetapi masih Transaksi tidak diserahkan Pada kali ini, transaksi lain turut mengakses data dan kemudian menggunakan data tersebut Kerana pengubahsuaian data belum diserahkan kepada pangkalan data, data yang dibaca oleh transaksi lain ialah "data kotor", tingkah laku ini. ialah "Dirty Read", dan operasi berdasarkan "Data Kotor" boleh menyebabkan masalah.
  • Kehilangan ubah suai: bermakna apabila transaksi membaca data, data lain turut mengakses data, kemudian selepas transaksi pertama mengubah suai data , transaksi kedua turut mengubah suai data ini. Dengan cara ini, keputusan pengubahsuaian dalam transaksi pertama hilang Keadaan ini dipanggil Pengubahsuaian Hilang. Contohnya: transaksi 1 membaca data dalam jadual A=20, transaksi 2 juga membaca A=20, transaksi 1 mengubah suai A=A-1, transaksi 2 juga mengubah suai A=A-1, keputusan akhir semuanya 19, tetapi transaksi 1 mengubah suai Rekod hilang.
  • Bacaan tidak boleh diulang: merujuk kepada membaca data yang sama beberapa kali dalam urus niaga sebelum urus niaga tamat, transaksi lain juga mengakses data dan menilai data tersebut data dibaca dua kali oleh transaksi pertama mungkin tidak konsisten Keadaan ini dipanggil bacaan tidak boleh berulang.
  • Baca hantu: Baca hantu adalah serupa dengan bacaan tidak boleh diulang merujuk kepada transaksi yang membaca beberapa baris data, dan kemudian Urus niaga lain memasukkan beberapa data. Dalam pertanyaan berikutnya, transaksi pertama akan membaca lebih banyak data daripada yang asalnya dibaca, seolah-olah halusinasi telah berlaku, jadi ia dipanggil bacaan hantu.

Perbezaan antara bacaan tidak berulang dan bacaan hantu:

Tumpuan bacaan tidak berulang adalah pengubahsuaian, manakala fokus bacaan hantu adalah penambahan atau pemadaman.

Chestnut 1 (syarat yang sama, data yang anda baca akan berbeza apabila anda membacanya semula): En.A dalam transaksi 1 terbaca gajinya 1000. Operasi belum tamat lagi, transaksi En. . B dalam 2 ubah suai gaji Encik A kepada 2000. Bila Encik A baca semula gajinya, jadi 2000. Ini bacaan yang tidak boleh diulang.

Chestnut 2 (syarat yang sama, bilangan rekod yang dibaca untuk kali pertama dan kedua adalah berbeza): Jika terdapat 4 orang dalam jadual gaji dengan gaji lebih daripada 3,000, transaksi 1 berbunyi semua Untuk orang dengan gaji lebih daripada 3,000, sejumlah 4 rekod telah disoal Ini kerana transaksi 2 menanyakan satu lagi rekod dengan gaji lebih daripada 3,000 dibaca semula dan mendapati 5 rekod.

4. Tahap pengasingan transaksi

Standard SQL mentakrifkan empat tahap pengasingan:

  • * *BACA-TIDAK KOMITED: **Tahap pengasingan paling rendah, membenarkan pembacaan data tanpa komitmen berubah, boleh menyebabkan bacaan kotor, bacaan tidak boleh berulang dan bacaan hantu.
  • ** KOMITED BACA: ** Membenarkan membaca data yang telah diserahkan oleh transaksi serentak Boleh mengelakkan bacaan kotor, tetapi boleh menyebabkan bacaan tidak berulang dan hantu.
  • ** Bacaan berulang (BACA-BACA): ** Hasil bacaan berbilang medan yang sama adalah konsisten, melainkan transaksi itu sendiri diubah suai, boleh mengelakkan bacaan kotor dan bacaan tidak diselesaikan Pembacaan berulang, tetapi boleh menyebabkan bacaan hantu.
  • ** BOLEH BERSIRI: ** Tahap pengasingan tertinggi, mematuhi sepenuhnya tahap pengasingan ACID, semua transaksi dilaksanakan mengikut urutan, boleh mengelakkan bacaan kotor dan bacaan tidak berulang , bacaan hantu .
隔离级别 脏读 不可重复读 幻读
读取未提交
读取已提交 ×
可重复读 × ×
可串行化 × × ×

MySQL InnoDBTahap pengasingan urus niaga lalai bagi enjin storan ialah BACA DIULANG , yang boleh dilihat melalui perintah select @@tx_isolation; pernyataan MySQL 8.0 Penyataan ditukar kepada SELECT @@transaction_isolation;

mysql> SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+

MySQL InnoDB Pembacaan enjin penyimpanan tidak dapat mengelakkan bacaan hantu, dan aplikasi perlu menggunakan bacaan terkunci untuk memastikan ini. > . Next-Key LocksOleh kerana semakin rendah tahap pengasingan, semakin sedikit kunci yang diminta oleh urus niaga, jadi tahap pengasingan kebanyakan sistem pangkalan data ialah

KOMITED-Baca (READ-COMMITTED)

, enjin storan Gunakan REPEATABLE-READ (boleh dibaca semula) InnoDB secara lalai tanpa sebarang penalti prestasi.

Enjin storan biasanya menggunakan tahap pengasingan

Boleh BersiriInnoDB dalam kes transaksi yang diedarkan. ? Kembangkan (kandungan berikut dipetik daripada Bab 7.7 "MySQL Technology Insider: InnoDB Storage Engine (2nd Edition)"):

Enjin storan InnoDB menyediakan sokongan untuk XA transaksi , dan menyokong pelaksanaan transaksi yang diedarkan melalui transaksi XA. Transaksi teragih merujuk kepada membenarkan berbilang sumber transaksi bebas untuk mengambil bahagian dalam transaksi global. Sumber transaksi biasanya sistem pangkalan data hubungan, tetapi boleh menjadi jenis sumber lain. Urus niaga global memerlukan semua urus niaga yang mengambil bahagian sama ada melakukan atau melancarkan semula, yang meningkatkan lagi keperluan ACID asal untuk urus niaga. Selain itu, apabila menggunakan transaksi teragih, tahap pengasingan transaksi enjin storan InnoDB mesti ditetapkan kepada SERIALIZABLE.

4. Demonstrasi situasi sebenar

Dalam konfigurasi lalai baris arahan, transaksi diserahkan secara automatik, bahawa ialah, dilaksanakan Pernyataan

akan melaksanakan operasi MySQL serta-merta. Anda boleh menggunakan arahan SQL untuk memulakan transaksi. COMMITSTART TRANSACTIONKami boleh menetapkan tahap pengasingan transaksi melalui arahan berikut.

Mari kita lihat beberapa penyata kawalan serentak yang kami gunakan dalam operasi sebenar:
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

    : Buka transaksi secara eksplisit.
  • START TRANSACTION | BEGIN
  • : Lakukan transaksi, menjadikan semua pengubahsuaian pada pangkalan data kekal.
  • COMMIT
  • : Gulung semula untuk menamatkan transaksi pengguna dan buat asal semua pengubahsuaian tanpa komitmen yang sedang dijalankan.
  • ROLLBACK

(baca kotor) baca tanpa komitmen

(Elakkan bacaan kotor) Baca komited

Bacaan yang tidak boleh diulangMasih ada rajah komited baca di atas Walaupun ia mengelakkan pembacaan tanpa komitmen, masalah bacaan tidak boleh berulang berlaku sebelum transaksi selesai.

Bacaan berulang[Pemindahan imej pautan luar gagal, tapak sumber mungkin mempunyai anti-leeching mekanisme, adalah disyorkan untuk menyimpan gambar dan memuat naiknya terus (img-ysjbfC4b-1651149978452)(https://qtspace.cn/contentimg/81.jpg)]

Bacaan Hantu Menunjukkan kejadian bacaan hantu

skrip sql 1 Apabila menanyakan rekod dengan gaji 500 buat kali pertama, hanya ada satu rekod, dan skrip sql 2 sisipan Rekod dengan gaji 500 telah diperolehi Selepas penyerahan, skrip sql 1 menggunakan pertanyaan baca semasa sekali lagi dalam transaksi yang sama dan mendapati dua rekod dengan gaji 500 muncul adalah bacaan hantu.

Bacaan hantu dan bacaan tidak berulang adalah agak serupa, tetapi fokus bacaan tidak berulang adalah pengubahsuaian, manakala fokus bacaan hantu ialah penambahan atau pemadaman.

Kaedah untuk menyelesaikan bacaan hantu

Laraskan tahap pengasingan transaksi kepada
    .
  • SERIALIZABLEPada tahap transaksi baca berulang, tambah kunci jadual pada jadual dalam operasi transaksi.
  • Pada tahap transaksi dibaca berulang, tambahkan
  • pada jadual untuk operasi transaksi.
  • Next-Key Locks
Penjelasan:
adalah bersamaan dengan kunci baris + kunci celah

Next-Key Locks

[Cadangan berkaitan:
tutorial video mysql

]

Atas ialah kandungan terperinci Apakah tahap pengasingan transaksi mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn