Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql

WBOY
WBOYke hadapan
2023-05-27 15:34:201693semak imbas

1. Tahap pengasingan transaksi Mysql

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql

Empat tahap pengasingan ini, apabila terdapat beberapa konflik urus niaga serentak, bacaan kotor dan bacaan tidak berulang mungkin berlaku , beberapa masalah dengan bacaan hantu, dan innoDB menyelesaikan masalah bacaan hantu dalam mod tahap pengasingan bacaan berulang,

2. Apakah bacaan hantu? diperoleh apabila menanyakan julat yang sama dua kali sebelum dan selepas adalah tidak konsisten

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam MysqlSeperti yang ditunjukkan dalam rajah, dalam transaksi pertama, kami melaksanakan pertanyaan julat, dan pada masa ini, Terdapat hanya satu keping data untuk syarat, dan dalam urus niaga kedua, ia memasukkan baris data dan menyerahkannya Apabila pertanyaan urus niaga pertama sekali lagi, hasil yang diperoleh ialah satu lagi data daripada hasil pertanyaan pertama. Ambil perhatian bahawa Pertanyaan pertama dan kedua bagi transaksi pertama adalah dalam perkara yang sama, jadi bacaan hantu akan membawa masalah ketekalan data

3. Bagaimanakah InnoDB menyelesaikan masalah pembacaan hantu

InnoDB memperkenalkan mekanisme

dan

untuk menyelesaikan masalah bacaan hantu间隙锁next-key lock

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam MysqlJika terdapat struktur indeks B+Tree sedemikian, struktur ini mempunyai 4 elemen Indeks ialah 1 , 4, 7, dan 10 masing-masing Apabila kami menanyakan rekod melalui indeks kunci utama dan mengunci rekod melalui

for update

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql Pada masa ini, kunci rekod akan. dijana, iaitu kunci baris

indeks ini

id=1

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql Sebelum kunci dilepaskan, transaksi lain tidak boleh mengakses rekod ini telah mentakrifkan bacaan hantu sebelum ini bermakna bahawa dalam transaksi yang sama, hasil yang diperoleh apabila menanyakan julat yang sama dua kali adalah tidak konsisten Perhatikan bahawa apa yang tersingkir di sini ialah pertanyaan julat, iaitu Untuk menyelesaikan masalah bacaan hantu , satu mata mesti dipastikan

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql, iaitu apabila transaksi dikunci melalui penyata sedemikian, transaksi lain akan dilaksanakan

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam MysqlPernyataan sisipan sedemikian perlu disekat sehingga transaksi yang diperoleh sebelum ini dikeluarkan, jadi

direka dalam innonDB Fungsi utamanya adalah untuk mengunci rekod indeks dalam julat tertentu

间隙锁

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam MysqlApabila julat pertanyaan

dikunci,

akan ditambah pada julat selang terbuka (4, 7) dalam nombor B+, yang bermaksud dalam kes ini, lain-lain transaksi yang memasukkan, mengemas kini atau memadam data dalam julat ini akan dikunci, tetapi terdapat situasi lain, seperti pernyataan pertanyaan ini: id > 4 and id <code>间隙锁

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql Untuk mengunci terhadap

syaratnya, ia perlu mengunci berbilang julat indeks, jadi dalam kes ini InnoDB memperkenalkan mekanisme yang dipanggil

adalah bersamaan dengan koleksi kunci celah dan kunci rekod mengunci barisan yang sedia ada mengunci jurang antara baris rekod dan id > 4 mengunci jumlah dua next-key locknext-key locknext-key lock

Indeks bukan unik bagi setiap Lajur baris data, akan terdapat Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql. Apabila transaksi memegang

baris data ini, ia akan mengunci bahagian data dalam julat kiri terbuka dan kanan Oleh itu, apabila mengunci melalui julat seperti

Apabila , InnoDB akan menambah a next-key lock kunci dan julat kunci ialah (4, 7] (7, 10] (10, +♾️]. Perbezaan antara next-key lock dan id > 4 adalah dalam julat penguncian next-key lock mengunci jurang antara dua indeks, manakala 间隙锁 mengunci berbilang selang indeks, yang termasuk next-key lock dan 间隙锁 Apabila kami menggunakan pertanyaan julat. untuk bukan sahaja mencapai rekod Rekod, tetapi juga memasukkan jurang Jurang, dalam kes ini, kunci kekunci digunakan, iaitu next-key lock Ia adalah algoritma kunci baris lalai dalam Mysql 记录锁

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam