Rumah  >  Artikel  >  pangkalan data  >  Analisis mendalam tentang pelbagai mekanisme kunci dalam MySQL

Analisis mendalam tentang pelbagai mekanisme kunci dalam MySQL

WBOY
WBOYasal
2023-12-21 08:19:08722semak imbas

MySQL 各种锁详解

Penjelasan terperinci tentang pelbagai kunci MySQL

1 Pengenalan
Dalam akses serentak, pangkalan data perlu menggunakan kunci untuk melindungi ketekalan dan integriti data. MySQL menyediakan pelbagai jenis kunci, termasuk kunci kongsi, kunci eksklusif, kunci kongsi niat, kunci eksklusif niat, dll. Artikel ini akan menggunakan contoh kod khusus untuk memperkenalkan dan menganalisis penggunaan dan ciri kunci ini.

2. Kunci Dikongsi
Kunci dikongsi ialah kunci yang digunakan untuk menghalang transaksi lain daripada menulis kepada sumber yang sama. Apabila urus niaga memperoleh kunci kongsi, urus niaga lain masih boleh memperoleh kunci kongsi, tetapi mereka hanya boleh membaca data dan tidak boleh mengubah suai data. Kita boleh menggunakan pernyataan SELECT untuk memperoleh kunci kongsi.

Contoh kod:

START TRANSACTION;
SELECT * FROM table_name WHERE key_col = value FOR SHARE;

3. Kunci Eksklusif (Kunci Eksklusif)
Kunci eksklusif digunakan untuk menghalang transaksi lain daripada membaca dan menulis sumber yang sama. Apabila transaksi memperoleh kunci eksklusif, transaksi lain tidak boleh memperoleh kunci kongsi atau kunci eksklusif. Kita boleh menggunakan penyataan SELECT ... FOR UPDATE untuk mendapatkan kunci eksklusif.

Contoh kod:

START TRANSACTION;
SELECT * FROM table_name WHERE key_col = value FOR UPDATE;

4. Kunci Niat
Kunci niat ialah jenis kunci khas yang digunakan untuk memberitahu transaksi lain sama ada terdapat kunci kongsi atau kunci eksklusif pada sumber. Kunci niat tidak akan menyekat operasi baca transaksi lain, tetapi hanya akan menyekat operasi tulis transaksi lain.

Kunci Dikongsi Niat digunakan untuk menunjukkan bahawa transaksi semasa akan memperoleh kunci dikongsi pada sumber.

Contoh kod:

START TRANSACTION;
SELECT * FROM table_name WHERE key_col = value LOCK IN SHARE MODE;

Kunci Eksklusif Niat digunakan untuk menunjukkan bahawa transaksi semasa akan memperoleh kunci eksklusif pada sumber.

Contoh kod:

START TRANSACTION;
SELECT * FROM table_name WHERE key_col = value FOR UPDATE;

5. Kebuntuan (Kebuntuan)
Kebuntuan merujuk kepada situasi di mana dua atau lebih transaksi sedang menunggu antara satu sama lain untuk melepaskan kunci yang mereka miliki, mengakibatkan ketidakupayaan untuk meneruskan pelaksanaan. MySQL menggunakan algoritma pengesanan kebuntuan untuk mengesan dan menyelesaikan masalah kebuntuan.

Apabila kebuntuan berlaku, MySQL akan memilih transaksi untuk melancarkan semula dan melepaskan kunci transaksi pada sumber. Kami boleh mengawal strategi pengesanan jalan buntu MySQL dengan menetapkan innodb_deadlock_detect.

Contoh kod:

SET innodb_deadlock_detect = 0;  -- 禁用死锁检测
SET innodb_deadlock_detect = 1;  -- 启用死锁检测

6 Butiran Kunci
MySQL menyediakan butiran kunci yang berbeza, termasuk kunci peringkat meja dan kunci peringkat baris.

  1. Penguncian aras meja
    Penguncian aras meja ialah butiran kunci yang paling asas, mengunci keseluruhan meja. Apabila transaksi memperoleh kunci peringkat jadual, transaksi lain tidak boleh melakukan sebarang operasi baca atau tulis di atas meja.

Contoh kod:

LOCK TABLES table_name WRITE;  -- 获取表级排他锁
  1. Penguncian peringkat baris (Penguncian peringkat baris)
    Penguncian peringkat baris ialah butiran kunci terkecil dan hanya mengunci baris tertentu. Apabila transaksi memperoleh kunci peringkat baris, transaksi lain boleh membaca data baris tetapi tidak boleh mengubah suai data baris.

Contoh kod:

START TRANSACTION;
SELECT * FROM table_name WHERE key_col = value FOR UPDATE;  -- 获取行级排他锁

7. Ringkasan
Artikel ini memperkenalkan secara terperinci penggunaan dan ciri pelbagai kunci dalam MySQL. Kunci kongsi digunakan untuk operasi baca, kunci eksklusif digunakan untuk operasi tulis dan kunci niat digunakan untuk memberitahu transaksi lain sama ada mereka telah memperoleh kunci kongsi atau kunci eksklusif. Pada masa yang sama, kebuntuan dan butiran kunci juga merupakan isu yang perlu difahami dan ditangani dalam kawalan serentak.

Dalam pembangunan sebenar, kita perlu memilih jenis kunci yang sesuai dan butiran kunci mengikut senario tertentu dan perlu menggunakan sepenuhnya ciri konkurensi dan sumber pangkalan data.

MySQL menyediakan mekanisme kawalan serentak yang berkuasa Penggunaan kunci yang betul boleh meningkatkan prestasi sistem dan konsistensi data. Saya harap artikel ini dapat membantu anda memahami dan menggunakan kunci MySQL.

Atas ialah kandungan terperinci Analisis mendalam tentang pelbagai mekanisme kunci dalam 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