Perbincangan mendalam tentang mekanisme penguncian enjin MySQL InnoDB

王林
Lepaskan: 2023-12-21 08:37:10
asal
1321 orang telah melayarinya

MySQL InnoDB 锁的深入解析

Analisis mendalam tentang kunci MySQL InnoDB

Dalam pangkalan data MySQL, kunci ialah mekanisme penting untuk memastikan integriti dan konsistensi data. Sebagai salah satu enjin storan yang paling biasa digunakan dalam MySQL, enjin storan InnoDB telah menarik banyak perhatian untuk mekanisme kuncinya. Artikel ini akan memberikan analisis mendalam tentang mekanisme penguncian enjin storan InnoDB, termasuk jenis kunci, peraturan penguncian, pengendalian jalan buntu, dsb., dan menyediakan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik.

1. Jenis kunci

Dalam enjin storan InnoDB, kunci terbahagi kepada dua jenis: kunci kongsi (kunci S) dan kunci eksklusif (kunci X). Kunci kongsi digunakan untuk operasi baca dan boleh dipegang oleh berbilang transaksi dan bukan kunci eksklusif bersama digunakan untuk operasi tulis dan hanya boleh dipegang oleh satu transaksi dan saling eksklusif dengan kunci lain. Di samping itu, InnoDB juga menyokong penguncian peringkat baris, yang mengunci baris data dan bukannya keseluruhan jadual, yang sangat meningkatkan prestasi serentak.

2. Peraturan penguncian

Enjin storan InnoDB mengikut peraturan penguncian yang ketat, yang terutamanya termasuk perkara berikut:

  1. Apabila transaksi membaca data, ia akan menambah kunci yang dikongsi pada baris data untuk menghalang transaksi lain daripada membaca data . Baris data diubah suai, tetapi transaksi lain tidak dihalang daripada membaca baris data.
  2. Apabila transaksi menulis data, ia akan menambah kunci eksklusif pada baris data untuk menghalang transaksi lain daripada membaca dan menulis baris data.
  3. Apabila transaksi memegang kunci kongsi pada baris data, transaksi lain boleh memegang kunci kongsi pada baris data pada masa yang sama, tetapi tidak boleh memegang kunci eksklusif apabila transaksi memegang kunci eksklusif pada baris data, lain-lain urus niaga tidak boleh Memegang kunci kongsi dan kunci eksklusif.
  4. Enjin storan InnoDB menggunakan kawalan konkurensi berbilang versi (MVCC) untuk mencapai konkurensi dalam operasi baca dan tulis Ia bukan sahaja boleh mencapai pengasingan baca dan tulis, tetapi juga mengurangkan konflik kunci dan meningkatkan prestasi serentak.

3. Pengendalian kebuntuan

Dalam persekitaran serentak, situasi kebuntuan pasti akan berlaku kerana interaksi antara urus niaga adalah rumit Apabila dua atau lebih transaksi menunggu kunci satu sama lain, Kebuntuan akan berlaku. Enjin storan InnoDB menggunakan dasar pemulangan tamat masa untuk kebuntuan, iaitu, apabila kebuntuan berlaku, sistem akan mengesan kebuntuan dan melancarkan transaksi yang memegang lebih sedikit kunci untuk memecahkan kebuntuan dan memastikan operasi normal sistem.

4. Contoh Kod

Seterusnya, kami menggunakan contoh kod khusus untuk menunjukkan mekanisme penguncian enjin storan InnoDB. Katakan kita mempunyai tiga medan bernama employee的表,包含idnamesalary, berikut ialah contoh kod mudah:

-- 开启事务
START TRANSACTION;

-- 事务1:对id为1的员工进行读操作
SELECT * FROM employee WHERE id = 1 FOR SHARE;

-- 事务2:对id为1的员工进行写操作
UPDATE employee SET salary = 6000 WHERE id = 1;

-- 提交事务
COMMIT;
Salin selepas log masuk

Dalam contoh di atas, transaksi 1 mula-mula melakukan operasi baca pada kunci kongsi pada pekerja dengan id 1, manakala transaksi 2 cuba membaca kunci kongsi. pada pekerja dengan id 1. Operasi tulis kunci eksklusif dilakukan pada baris data yang sama. Memandangkan transaksi 1 memegang kunci kongsi, transaksi 2 tidak boleh mendapatkan kunci eksklusif dan akan disekat sehingga transaksi 1 melepaskan kunci. Contoh ini jelas menunjukkan mekanisme penguncian dan peraturan penguncian enjin storan InnoDB. Ringkasan . Dalam pembangunan sebenar, penggunaan rasional mekanisme penguncian InnoDB adalah penting untuk memastikan prestasi serentak dan konsistensi data sistem. Saya berharap artikel ini akan memberi pembaca pemahaman yang lebih jelas tentang mekanisme penguncian enjin storan InnoDB.

Atas ialah kandungan terperinci Perbincangan mendalam tentang mekanisme penguncian enjin MySQL InnoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!