Analisis prinsip pelaksanaan kunci MySQL
Pengenalan:
Dalam persekitaran akses serentak ke pangkalan data, untuk memastikan integriti dan konsistensi data, sistem pangkalan data perlu melaksanakan mekanisme kunci. Mekanisme kunci memastikan bahawa transaksi yang berbeza boleh mengakses dan mengubah suai data dengan teratur dengan menyekat akses kepada sumber yang dikongsi. Sebagai pangkalan data hubungan yang biasa digunakan, MySQL juga menyediakan pelbagai mekanisme kunci untuk menangani isu akses serentak. Artikel ini akan menganalisis prinsip pelaksanaan kunci MySQL dan menyediakan contoh kod khusus.
Kunci kongsi (kunci S): Berbilang transaksi boleh berkongsi sumber yang sama dan menggunakan kunci kongsi apabila membaca data Pengecualian bersama tidak diperlukan kerana operasi baca tidak akan menjejaskan data.
Kunci eksklusif (kunci X): Hanya satu transaksi boleh mengunci sumber dan transaksi lain tidak boleh mengaksesnya. Gunakan kunci eksklusif semasa mengemas kini, memasukkan dan memadam data untuk memastikan integriti dan konsistensi data.
Kunci Dikongsi: Berbilang transaksi boleh menahan kunci ini pada masa yang sama Operasi baca tidak akan menyekat operasi baca transaksi lain, tetapi akan menyekat operasi tulis transaksi lain.
Kunci Eksklusif: Hanya satu transaksi boleh memegang kunci dan transaksi lain tidak boleh mengakses sumber yang dikunci.
Kunci Dikongsi Niat: Kunci peringkat meja Sesuatu urus niaga mesti terlebih dahulu memperoleh kunci perkongsian peringkat baris sebelum memperoleh kunci peringkat baris Ia digunakan untuk menunjukkan bahawa transaksi sedia untuk memperoleh kunci kongsi peringkat baris meja itu.
Kunci Eksklusif Niat: Kunci peringkat meja Sesuatu transaksi mesti memperoleh kunci eksklusif niat terlebih dahulu sebelum memperoleh kunci peringkat baris Ia digunakan untuk menunjukkan bahawa transaksi sedia untuk memperoleh kunci eksklusif peringkat baris meja itu.
Kunci Baris: MySQL menyokong mengunci baris dalam jadual data Kunci peringkat baris boleh mengawal akses kepada data dengan tepat dan mengelak daripada mengunci keseluruhan jadual.
Kunci Meja: Mengunci keseluruhan meja pada satu masa bukan sahaja menjejaskan prestasi serentak, tetapi juga boleh menyebabkan kebuntuan.
Apabila menggunakan enjin storan InnoDB, disebabkan ciri penguncian peringkat baris, MySQL akan mengunci setiap rekod baris untuk mencapai kawalan peringkat baris.
Pelaksanaan kunci MySQL bergantung terutamanya pada empat mekanisme berikut:
Pengecualian bersama kunci: Kunci dalam MySQL dilaksanakan berdasarkan kunci pengecualian bersama akses yang eksklusif kepada kunci dicapai dengan menetapkan bit bendera dalam memori.
Pengesanan jalan buntu: MySQL menggunakan algoritma pengesanan jalan buntu untuk menyelesaikan masalah jalan buntu. Apabila kebuntuan berlaku, MySQL secara automatik membunuh transaksi untuk melegakan kebuntuan.
Mekanisme tamat masa kunci: Operasi kunci dalam MySQL mempunyai mekanisme tamat masa Jika transaksi tidak dapat memperoleh sumber terkunci dalam tempoh masa tertentu, ia akan berputus asa secara automatik.
Menunggu mekanisme bangun tidur: Apabila transaksi dalam MySQL sedang menunggu sumber kunci, mereka akan diproses melalui mekanisme bangun menunggu. Apabila sumber kunci menunggu tersedia, transaksi akan dibangkitkan untuk meneruskan pelaksanaan.
--Buat jadual ujian
BUAT JADUAL test
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(20) DEFAULT NULL,
PRIMARY KEY (id
) ENGINE=CHARSET LALAI InnoDB=utf8;
-- Transaksi 1 menambah kunci eksklusif
PILIH * DARI ujian WHERE id = 1 UNTUK KEMASKINI;
-- Transaksi 2 menambah kunci kongsi
PILIH * DARI ujian DI MANA id = 1 LOCK IN SHARE MODE;
Dalam contoh di atas, transaksi 1 menambahkan kunci eksklusif pada rekod dengan id=1 dan transaksi 2 menambah kunci kongsi pada rekod dengan id=1. Selepas transaksi 1 memperoleh kunci eksklusif, transaksi lain tidak boleh membaca atau mengubah suai rekod baris. Selepas transaksi 2 memperoleh kunci kongsi, transaksi lain masih boleh membaca rekod baris, tetapi tidak boleh mengubah suainya.
Atas ialah kandungan terperinci Menganalisis mekanisme pelaksanaan kunci MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!