Rumah > Artikel > pangkalan data > Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi
Jika kami tidak mengambil berat langsung, gunakan Baca Tanpa Komitmen Mekanisme pengasingan transaksi, jika utas ini dibenarkan untuk mengendalikan pangkalan data secara serentak, bacaan kotor (data tidak terikat dibaca), bacaan tidak boleh berulang (dua nilai pertanyaan berbeza), bacaan hantu (dua volum data pertanyaan berbeza) , dsb. Masalah, data mempunyai keselamatan paling rendah, kelebihannya ialah kecekapan serentak adalah sangat tinggi, secara amnya kami tidak akan menggunakan
jika kami mensiri (bergantung pada pelaksanaan Kunci), semua urus niaga diisih melalui kunci Walaupun keselamatan data dipertingkatkan, kecekapan serentak terlalu rendah dan
, yang mengimbangi keselamatan data, ketekalan dan kecekapan konkurensi dan dikawal oleh konkurensi berbilang versi MVCC Dilaksanakan (MVCC ialah prinsip pembacaan komited dan boleh dibaca berulang, dan kunci ialah prinsip bersiri)
Kunci baris InnoDB melalui indeks pada indeks Ia dilaksanakan dengan mengunci item dan bukannya mengunci rekod baris dalam jadual
Memandangkan pelaksanaan kunci baris InnoDB ialah kunci yang ditambahkan untuk medan indeks, bukan untuk rekod baris, walaupun baris jadual yang berbeza di bawah InnoDB enjin diakses, jika medan indeks yang sama digunakan Sebagai keadaan penapis, konflik kunci masih akan berlaku dan hanya boleh dilakukan secara bersiri, bukan serentak
Walaupun indeks digunakan dalam SQL, selepas pengoptimum MySQL,
Jika Ia dianggap bahawa pengimbasan jadual penuh adalah lebih cekap daripada menggunakan indeks Pada masa ini, penggunaan indeks akan ditinggalkan oleh itu, kunci baris tidak akan digunakan, tetapi kunci jadual akan digunakan Contohnya, untuk sesetengah jadual kecil , MySQL tidak akan menggunakan indeks
3. Kunci eksklusif (Eksklusif) dan kunci dikongsi (Dikongsi. )
kunci kongsi, juga dikenali sebagai kunci S, kunci baca
antara baca dan baca (SS) Ia serasi, tetapi membaca dan menulis (SX, SX) dan menulis (XX) adalah saling eksklusif
Urus niaga menambah kunci S pada objek data A. Ia boleh melakukan operasi baca pada A tetapi tidak boleh melakukan operasi kemas kini Semasa tempoh penguncian, transaksi lain boleh menambah kunci S pada A tetapi tidak boleh menambah kunci X
Apabila transaksi menambah kunci X pada objek data A, ia boleh membaca dan mengemas kini A. Semasa tempoh penguncian, transaksi lain tidak boleh tambahkan sebarang kunci pada A
Kunci paparan: pilih … Uji kunci eksklusif dan kunci kongsi antara transaksi yang berbeza Keserasian
2. Uji penambahan kunci baris Pada item indeks
kunci pelaksanaan ditambah pada pokok indeks
Gunakan medan tidak diindeks jadual sebagai syarat penapis
Transaksi 2 sekarang juga ingin mendapatkan kedudukan rekod ini Ia dikunci, dan ia boleh diramalkan gagal; kini transaksi 2 memperoleh kunci eksklusif rekod chenwei, cuba lihat jika ia boleh berjaya
InnoDB menyokong kunci baris , apabila menggunakan id kunci utama sebagai syarat penapisan, transaksi 1 dan transaksi 2 boleh berjaya memperoleh kunci untuk baris yang berbeza. Walau bagaimanapun, kini kami mendapati bahawa kami tidak boleh mendapatkan kunci eksklusif bernama chenwei Mengapa ini? Mari jelaskan:
Kunci baris InnoDB dilaksanakan dengan mengunci entri indeks, bukannya mengunci rekod baris jadual
Dan kami Menggunakan nama sebagai keadaan penapis tidak menggunakan indeks , jadi secara semula jadi kunci baris tidak akan digunakan, tetapi kunci meja akan digunakan. Ini bermakna InnoDB menggunakan kunci peringkat baris hanya apabila data diambil melalui indeks, jika tidak InnoDB akan menggunakan kunci jadual!!!
Kami menambah indeks pada medan nama
Kami mendapati bahawa selepas menambah indeks pada nama, dua transaksi boleh mendapatkan kunci eksklusif (untuk kemas kini) pada baris yang berbeza, yang sekali lagi membuktikan bahawa kunci baris InnoDB ialah Pergi ke pokok indeks kunci utama dan dapatkan kunci eksklusif rekod baris yang sepadan
(Tekaan peribadi saya ialah rekod yang sepadan dalam pokok indeks tambahan dan pokok indeks kunci utama telah dikunci )
4. Ujian tahap pengasingan siri(Semua transaksi menggunakan kunci eksklusif atau kunci kongsi, tidak perlu pengguna mengunci secara manual)
Tetapkan tahap pengasingan siriDua transaksi boleh memperoleh kunci kongsi pada masa yang sama (kewujudan bersama SS)
Sekarang biarkan transaksi 2 dimasukkan data
Pada masa ini, sisipan perlu menambah kunci eksklusif, tetapi memandangkan transaksi 1 telah menambah kunci dikongsi pada keseluruhan jadual, transaksi 2 tidak lagi berjaya mengunci jadual (SX tidak wujud bersama)
gulung balik
Oleh kerana kami menambah indeks pada nama, pilihan di atas adalah bersamaan dengan menambah kunci kongsi baris pada data bernama zhangsan
Kemas kini Transaksi 2
Transaksi 2 tidak boleh dikemas kini kerana keseluruhan jadual telah dikunci oleh kunci kongsi transaksi 1 pada masa ini
Transaksi 2 mencari zhangsan pada pepohon indeks tambahan , cari nilai kunci utama yang sepadan, dan kemudian pergi ke pepohon indeks kunci utama untuk mencari rekod yang sepadan, tetapi mendapati bahawa baris rekod ini telah dikunci oleh kongsi kunci. Transaksi 2 boleh mendapatkan kunci kongsi, tetapi tidak boleh mendapatkan kunci eksklusif
Mari cuba gunakan id indeks kunci utama untuk melihat sama ada kemas kini
dan rekod pada pokok indeks kunci primer dikunci
(tekaan peribadi ialah ia sepatutnya pokok indeks tambahan dan Data yang sepadan dengan pokok indeks kunci utama dikunci) Kami berjaya mengemas kini data dengan id=8. Hanya kunci baris ditambahkan pada data baris dengan id 7, jadi kami boleh berjaya mengendalikan data dengan id 8Jika terdapat indeks, kunci baris digunakan jika tidak ada indeks, Kemudian gunakan kunci meja.
Kunci aras meja atau kunci aras baris merujuk kepada kebutiran kunci bersama dan kunci eksklusif merujuk kepada sifat kunci sama ada kunci meja atau kunci baris, terdapat perbezaan antara kunci yang dikongsi kunci dan kunci eksklusif
Atas ialah kandungan terperinci Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!