Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

PHPz
PHPzke hadapan
2023-06-03 10:49:071261semak imbas

    1 Pemilihan mekanisme pengasingan urus niaga

    • 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

    • <.>Oleh itu, secara amnya kami menggunakan dua tahap pengasingan
    • baca komited dan baca berulang

      , 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)

    • 2. Kunci peringkat meja & kunci peringkat baris

    Kunci peringkat meja: kunci seluruh meja . Overhed adalah kecil (kerana anda tidak perlu mencari rekod baris tertentu dalam jadual untuk menguncinya. Jika anda ingin mengubah suai jadual ini, anda terus memohon kunci meja ini), pengunciannya pantas, dan tidak akan ada kebuntuan; butiran kunci adalah besar, dan konflik kunci akan berlaku. Ia mahal (anda perlu mencari rekod yang sepadan dalam jadual, dan terdapat proses mencari jadual dan indeks), mengunci adalah perlahan, dan kebuntuan akan berlaku adalah yang paling kecil, kebarangkalian konflik kunci adalah terendah, dan konkurensinya tinggi

    Enjin storan InnoDB menyokong pemprosesan urus niaga, jadual menyokong penguncian peringkat baris dan konkurensi lebih baik

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Kunci baris InnoDB melalui indeks pada indeks Ia dilaksanakan dengan mengunci item dan bukannya mengunci rekod baris dalam jadual
      , yang bermaksud InnoDB hanya akan menggunakan kunci peringkat baris untuk mendapatkan semula data melalui keadaan indeks, jika tidak InnoDB akan menggunakan kunci jadual
    1. 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

    2. 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
    3. , tetapi kunci jadual akan digunakan Contohnya, untuk sesetengah jadual kecil , MySQL tidak akan menggunakan indeks
      3. Kunci eksklusif (Eksklusif) dan kunci dikongsi (Dikongsi. )

    Kunci eksklusif, Juga dikenali sebagai kunci X, kunci tulis

    • 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

    • Terdapat hubungan berikut antara menambah X dan S mengunci urus niaga:

    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

    • Mari kita semak SQL dan kandungan jadual dahulu

    Semak tahap pengasingan:

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Mula-mula buka transaksi dan tambahkan kunci eksklusif pada data dengan id=7

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Kemudian gunakan pelanggan lain untuk membuka transaksi

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Kami menggunakan urutan perkhidmatan transaksi lain untuk menambah kunci eksklusif pada data dengan id=7, yang disekat

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Kami cuba menambah kunci eksklusif pada data dengan id=7 Kunci kongsi masih disekat

    Ringkasan: Hanya kunci SS boleh wujud bersama antara urus niaga berbeza untuk kunci data, dan XX, SX dan XS tidak boleh wujud bersama

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi 2. Uji penambahan kunci baris Pada item indeks

    kunci pelaksanaan ditambah pada pokok indeks

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Gunakan medan tidak diindeks jadual sebagai syarat penapis

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    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

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    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

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    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 ) Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    4. Ujian tahap pengasingan siri

    (Semua transaksi menggunakan kunci eksklusif atau kunci kongsi, tidak perlu pengguna mengunci secara manual)

    Tetapkan tahap pengasingan siri

    Dua transaksi boleh memperoleh kunci kongsi pada masa yang sama (kewujudan bersama SS)

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Sekarang biarkan transaksi 2 dimasukkan data

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi


    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 Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    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 Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    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 Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    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 8

    Cara menggunakan kunci meja MySQL, kunci baris, kunci eksklusif dan kunci kongsi

    Jika 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!

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